reshape2: mehrere Ergebnisse der Aggregationsfunktion?

8

Nach dem, was ich gelesen habe, * haben die Cast-Operationen in reshape2 ihr result_variable -Feature verloren. Hadley deutet an, plyr für diesen Zweck zu verwenden (indem mehrere Ergebnisspalten an den Eingabedatenrahmen angehängt werden). Wie würde ich das Dokumentationsbeispiel erkennen ...

%Vor%

mit reshape2 ( dcast ) und plyr ( ddply )?

    
mrcalvin 31.01.2014, 09:54
quelle

4 Antworten

13

Diese Frage hat mehrere Antworten, aufgrund der Flexibilität der Pakete "reshape2" und "plyr". Ich werde eines der einfachsten Beispiele zeigen, die hier zu verstehen sind:

%Vor%

Schritt 1 : Lassen Sie uns in Schritte aufteilen. Lassen Sie uns zuerst die Definition von 'aqm' alleine lassen und von den geschmolzenen Daten arbeiten. Dadurch wird das Beispiel leichter verständlich.

%Vor%

Schritt 2 : Nun möchten wir die Spalte "Wert" durch die Spalten "min" und "max" ersetzen. Dies können wir mit der Funktion "ddply" aus dem Paket "plyr" erreichen. Dazu verwenden wir die Funktion 'ddply' (Datenrahmen als Eingabe, Datenrahmen als Ausgabe, daher "dd" -ply). Wir spezifizieren zuerst die Daten.

%Vor%

Und dann geben wir die Variablen an, die wir verwenden wollen, um unsere Daten zu gruppieren, "Monat" und "Variable". Wir verwenden die Funktion . , um direkt auf diese Variablen zu verweisen, anstatt auf die Werte zu verweisen, die sie enthalten.

%Vor%

Jetzt müssen wir eine Aggregationsfunktion auswählen. Wir wählen hier die Funktion summarize , weil wir Spalten ('Tag' und 'Wert') haben, die wir nicht in unsere endgültigen Daten aufnehmen wollen. Die summarize -Funktion entfernt alle ursprünglichen, nicht gruppierenden Spalten.

%Vor%

Schließlich geben wir die Berechnung für jede Gruppe an. Wir können auf die Spalten des ursprünglichen Datenrahmens ('aqm') verweisen, auch wenn sie nicht in unserem endgültigen Datenrahmen enthalten sind. So sieht es aus:

%Vor%

Schritt 3 : Wir können sehen, dass die Daten erheblich reduziert werden, da die Funktion ddply die Zeilen aggregiert hat. Jetzt müssen wir die Daten wieder aufschmelzen, damit wir unsere zweite Variable für den endgültigen Datenrahmen bekommen können. Beachten Sie, dass wir ein neues Argument variable.name angeben müssen, sodass wir nicht zwei Spalten namens "variable" haben.

%Vor%

Schritt 4 Und schließlich können wir alles zusammenfassen, indem wir unsere Daten in die endgültige Form bringen.

%Vor%

Hoffentlich gibt Ihnen dieses Beispiel genug Verständnis, um Sie zu beginnen. Beachten Sie, dass eine neue, datenrahmenoptimierte Version des 'plyr' Pakets aktiv unter dem Namen 'dplyr' entwickelt wird, so dass Sie vielleicht bereit sein möchten, Ihren Code in das neue Paket zu konvertieren, nachdem es vollständig flügge geworden ist.

    
Dinre 31.01.2014, 16:08
quelle
5

Ich denke, dass die anderen Antworten Sie in Bezug auf die Verwendung von "plyr" oder "dplyr" abdecken sollten (und ich würde Sie ermutigen, weiterhin in diese Richtung zu schauen).

Für Spaß , hier ist ein Wrapper um dcast , damit Sie mehrere Funktionen angeben können. Es funktioniert nicht mit Funktionen, die mehrere Werte zurückgeben (wie range ) und erfordert eine benannte Liste von Funktionen.

%Vor%

Es sieht nach etwas durcheinander, aber das Ergebnis ist, dass Sie mit der gleichen Syntax bleiben, mit der Sie vertraut sind, während Sie mehrere Aggregationsfunktionen verwenden. Die "Namen" für das Argument funs werden als Suffixe in den resultierenden Namen verwendet. Anonyme Funktionen können wie erwartet angegeben werden, z. B. maxSq = function(x) max(x)^2 .

%Vor%     
A5C1D2H2I1M1N2O1R2T1 18.02.2014 19:17
quelle
4

Hier ist eine dplyr Lösung, die die erstaunliche Funktion %>% nutzt. Es verwendet auch die Base reshape -Funktion, die oft zu wenig genutzt wird (IMHO). Der Code ist selbsterklärend.

%Vor%     
Ramnath 31.01.2014 16:37
quelle
2

Mit dem letzten Commit zum Entwicklungsversion von data.table v1.9.5 , können wir mehrere value.var Spalten gleichzeitig darstellen (und auch mehrere Aggregationsfunktionen in fun.aggregate verwenden). Bitte beachten Sie ?dcast für mehr und auch die Beispiele Abschnitt.

So könnten wir dcast verwenden:

%Vor%

Sie können die Warnungen ignorieren.

    
Arun 16.03.2015 01:13
quelle

Tags und Links