Schwenkbare Zeilen in Spalten
Angenommen (zur Vereinfachung) ich habe eine Tabelle, die eine gewisse Kontrolle vs. Behandlung Daten:
Which, Color, Response, Count
Control, Red, 2, 10
Control, Blue, 3, 20
Treatment, Red, 1, 14
Treatment, Blue, 4, 21
Für jede Farbe, ich möchte eine einzelne Zeile mit der Kontrolle und Behandlung von Daten, d.h.:
Color, Response.Control, Count.Control, Response.Treatment, Count.Treatment
Red, 2, 10, 1, 14
Blue, 3, 20, 4, 21
Ich denke, ein Weg, dies zu tun ist durch die Verwendung eines internen merge auf jede Kontrolle/Behandlung Teilmenge (Verschmelzung auf die Spalte Farbe), aber gibt es einen besseren Weg? Ich dachte der reshape Paket oder der Stapel-Funktion irgendwie könnte es tun, aber ich bin mir nicht sicher.
Wenn Sie erstellen eine brauchbare Daten.Rahmen mit so etwas wie d....put(head(df,20)) es wirkt Wunder für diejenigen von uns, die versuchen, Sie zu beantworten
InformationsquelleAutor grautur | 2010-09-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mithilfe des reshape-Paket.
Ersten, Schmelzen Ihre Daten.Rahmen:
Dann Darsteller:
Je nachdem, welche version von der reshape-Paket, mit dem Sie arbeiten, könnte es sein
cast()
(reshape) oderdcast()
(reshape2)Voila.
InformationsquelleAutor Brandon Bertelsen
Den
cast
Funktion aus derreshape
- Paket (nicht zu verwechseln mit derreshape
- Funktion in base-R) können das und viele andere Dinge. Siehe hier: http://had.co.nz/reshape/Ich erinnere mich nicht genau, aber ich bin mir ziemlich sicher, dass der reshape Paket-Dokumentation enthält ein Beispiel für genau das. Man muss es sagen, wie Sie wollen, dass die Namen der Spalten konstruiert.
InformationsquelleAutor zwol
Hinzufügen, um die Optionen (viele Jahre später)....
Ist der typische Ansatz in base-R würde die
reshape
- Funktion (die ist in der Regel unbeliebt ist wegen der Vielzahl der Argumente, nehmen Sie sich Zeit zu meistern). Es ist eine ziemlich effiziente Funktion für kleinere Datensätze, aber nicht immer gut skaliert.Bereits abgedeckt sind
cast
/dcast
aus dem "reshape" und "reshape2" (und jetztdcast.data.table
aus "Daten.Tabelle", besonders nützlich, wenn Sie große datasets). Aber auch aus der Hadleyverse, es gibt "tidyr", die funktioniert gut mit der "dplyr" - Paket:Auch zu beachten wäre, dass in einer der nächsten version der "Daten.Tabelle", diedcast.data.table
Funktion sollte in der Lage sein, dies zu behandeln, ohne zuerstmelt
Ihrer Daten.Den
data.table
Umsetzung vondcast
ermöglicht Ihnen das konvertieren mehrerer Spalten zu einem breiten format, ohne zu Schmelzen Sie es zuerst, wie folgt:reshape
Beispiel. Ich glaube, Ihrreshape
Beispiel zusammen mit der ursprünglichen Frage Hinzugefügt werden sollreshape
Funktion offizielle Dokumentation.InformationsquelleAutor A5C1D2H2I1M1N2O1R2T1
Umformen funktioniert in der Tat für Schwenk eine skinny-Daten-frame (z.B. von einer einfachen SQL-Abfrage), um eine große matrix, und ist sehr flexibel, aber es ist langsam. Bei großen Datenmengen, sehr, sehr langsam. Glücklicherweise, wenn Sie nur wollen, um pivot zu einer festen Form, es ist ziemlich einfach zu schreiben, eine kleine C-Funktion zu tun, die pivot-schnell.
In meinem Fall, schwenkbare eine skinny-Daten-frame mit 3 Spalten und 672,338 Zeilen nahm 34 Sekunden mit Umformen, 25 Sekunden mit meiner R-code, und 2,3 Sekunden mit C. Ironischerweise, die C-Implementierung war wahrscheinlich einfacher zu schreiben, als meine (tuned for speed) R Umsetzung.
Hier ist das Kern-C-code für Schwenk-floating-point-zahlen. Beachten Sie, dass es wird davon ausgegangen, dass Sie bereits zugeordnete eine korrekte Ergebnis-matrix in R vor Aufruf der C-code, der bewirkt, dass die R-devel Leute Gruseln im horror:
Ich sollte aufgeräumt hast meine pivot-code und legen Sie es in einen stand-alone-R Paket, aber nie getan... 🙁 Das Kern-C-code ist ziemlich einfach, habe ich nur noch die floating point version zu meinem ursprünglichen post oben. Der R-code, den ich verwenden, um Laufwerk, das ist ein bisschen komplizierter (und auch viele Sachen, speziell für meine Umwelt). Es setzt dimnames, schwenkt Saiten mit der Umstellung auf/von ganzzahligen Faktoren, etc.
InformationsquelleAutor atp