Wie kann ich die folgende Gruppe machen?

8

Ich habe so einen Datensatz:

%Vor%

Nun möchte ich die Daten nach Daten gruppieren und den Wert der Klasse B von Klasse A subtrahieren. Ich schaute ddply, zusammenfassen, schmelzen und aggregieren, aber kann nicht ganz bekommen, was ich will. Gibt es einen Weg, es leicht zu machen? Beachten Sie, dass ich genau zwei Werte pro Datum habe, eins von Klasse A und eins von Klasse B. Ich meine, ich könnte es in zwei dfs ordnen nach Datum und Klasse ordnen und es wieder zusammenführen, aber ich denke, dass es mehr R gibt es zu tun.

    
Matt Bannert 16.06.2011, 10:26
quelle

4 Antworten

6

Der einfachste Weg, den ich mir vorstellen kann, ist die Verwendung von dcast aus dem Paket reshape2 , um einen Datenrahmen mit einem Datum pro Zeile und den Spalten A und B zu erstellen und dann transform zu verwenden Mach A-B :

%Vor%     
Prasad Chalasani 16.06.2011, 10:45
quelle
7

Nehmen wir diesen Datenrahmen an (generiert wie in Prasads Beitrag, aber mit einem set.seed für die Reproduzierbarkeit):

%Vor%

Dann betrachten wir sieben Lösungen:

1) zoo kann uns eine Ein-Zeilen-Lösung geben (ohne die library -Anweisung):

%Vor%

gibt diese zoo -Serie:

%Vor%

Beachten Sie auch, dass as.data.frame(z) oder data.frame(time = time(z), value = coredata(z)) einen Datenrahmen ergibt; jedoch möchten Sie es möglicherweise als ein Zoo-Objekt belassen, da es eine Zeitreihe ist und andere Operationen in dieser Form, z. plot(z)

2) sqldf kann auch eine Lösung mit einer Aussage (abgesehen von% code_% Aufruf) geben:

%Vor%

3) tapply kann als Grundlage für eine von der sqldf-Lösung inspirierte Lösung verwendet werden:

%Vor%

4) aggregate kann genauso verwendet werden wie library und sqldf oben (obwohl auch eine etwas andere Lösung auf Basis von tapply bereits erschienen ist):

%Vor%

5) summaryBy aus dem DoBy-Paket kann eine weitere Lösung bereitstellen, obwohl es ein aggregate benötigt, um es zu unterstützen:

%Vor%

6) Remix aus dem Remix-Paket kann es auch tun, aber mit einem transform und bietet besonders schöne Ausgabe:

%Vor%

7) summary.formula im Hmisc-Paket hat auch schöne Ausgabe:

%Vor%     
G. Grothendieck 16.06.2011 14:52
quelle
5

In der Basis R würde ich das Problem mit aggregate und sum angehen. Dies funktioniert, indem jeder Wert der Klasse B in sein negatives umgewandelt wird:

(Mit den von @PrasadChalasani bereitgestellten Daten)

%Vor%     
Andrie 16.06.2011 12:13
quelle
4

Für die Aufnahme mag ich die Umformoption am besten. Hier ist eine plyr-Option mit summarize:

%Vor%     
Chase 16.06.2011 11:30
quelle

Tags und Links