2013-04-10 10 views
13

Hallo und danke für Ihre Unterstützung im Voraus,R Programmierung - Sum Elemente der Zeilen mit gemeinsamen Werten

(bitte beachten Sie Abschnitt Kommentare zu zusätzlichem Einblick: dh der Kosten Spalt im Beispiel unten auf diese Frage gegeben; Simon, bietet eine gute Antwort, aber die Kosten Spalte selbst ist nicht in der Datenantwort von ihm dargestellt, obwohl die Funktion, die er bietet arbeitet mit der Spalte Kosten)

Ich habe einen Datensatz, können wir es "Daten" nennen sieht so aus

NAME  DATE  COLOR PAID COST 
Jim  1/1/2013 GREEN 150  100 
Jim  1/2/2013 GREEN 50  25 
Joe  1/1/2013 GREEN 200  150 
Joe  1/2/2013 GREEN 25  10 

Ich möchte die PAID- (und COST-) Elemente der Datensätze mit demselben NAME-Wert summieren und die Anzahl der Zeilen (wie in diesem Beispiel) auf 2 reduzieren, sodass mein neuer Datenrahmen wie folgt aussieht:

NAME  DATE  COLOR PAID COST 
Jim  1/2/2013 GREEN 200  125 
Joe  1/2/2013 GREEN 225  160 

Soweit die Daten betroffen sind, ist mir nicht wirklich wichtig, welche überlebt die Summenbildung.

Ich habe so weit wie rowSums (Daten) bekommen, aber ich bin nicht genau sicher, wie man es benutzt. Jede Hilfe würde sehr geschätzt werden.

Antwort

21

aggregate ist die Funktion, die Sie suchen:

aggregate(cbind(PAID , COST) ~ NAME + COLOR , data = data , FUN = sum) 
# NAME PAID 
# 1 Jim 200 
# 2 Joe 225 
+0

Danke Simon. Ich schätze es sehr. Ich habe mich gefragt, ob es eine Möglichkeit geben würde, das Feld "FARBE" mit jeder dieser Zeilen im Aggregat beizubehalten. –

+0

Sicher, ich werde die Antwort aktualisieren. Sind alle Ihre Farbfelder für jede Person gleich? Wenn nicht, willst du am häufigsten? –

+0

Also für jede Person würden alle ihre Farben durch die Aufzeichnungen konstant bleiben. Zum Beispiel wird Jim immer Grün haben, und Joe kann rot haben, aber Joes Aufzeichnungen werden immer rot sein. Ein letzter Aspekt dieser Frage. Wenn ich zusätzlich zu PAID (d. H. COST) ein weiteres numerisches Datenfeld haben sollte, wie könnte ich dieses Feld auf gleiche Weise summieren? Vielen Dank so sehr. –