2013-04-10 16 views
13

Ciao e grazie in anticipo per il vostro aiuto,R Programmazione - Somma Elementi di righe con valori comuni

(Si ricorda sezione commenti per ulteriori approfondimenti: cioè la colonna costo nell'esempio qui sotto è stato aggiunto a questa domanda; Simon, fornisce un'ottima risposta, ma la colonna di costo non è rappresentata nella risposta dati da lui, sebbene la funzione che fornisce funzioni con la colonna di costo)

Ho un set di dati, chiamiamolo 'dati' che assomiglia a questo

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 

Quello che mi piacerebbe fare è sommare gli elementi PAID (e COST) dei record con lo stesso valore NAME e ridurre il numero di righe (come in questo esempio) a 2, in modo tale che il mio nuovo frame dati assomigli a questo:

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

Per quanto riguarda le date, non mi interessa davvero quale sopravviva al processo di sommatoria.

Sono arrivato fino a rowSum (dati), ma non sono esattamente sicuro di come utilizzarlo. Qualsiasi aiuto sarebbe molto apprezzato.

risposta

21

aggregate è la funzione che si sta cercando:

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

Grazie Simon. Lo apprezzo molto. Mi stavo chiedendo se ci sarebbe stato un modo per mantenere il campo "COLORE" con ciascuna di queste righe nell'aggregato. –

+0

Certo, aggiornerò la risposta. Tutti i campi di colore sono uguali per ogni persona? Se non vuoi il più comune? –

+0

Quindi, per ogni persona, tutti i loro colori rimarrebbero costanti attraverso i record. Ad esempio, Jim avrà sempre Green e Joe potrebbe avere il rosso, ma i record di Joe saranno sempre rossi. Un ultimo aspetto di questa domanda. Se dovessi avere un altro campo di dati numerici oltre a PAID (cioè COST), come potrei sommare quel campo allo stesso modo? Grazie mille. –

Problemi correlati