2012-05-24 20 views
14

Ho un set di dati relazionali, in cui sto cercando informazioni diadiche.Unisci righe nel data frame

Ho 4 colonne. Mittente, Ricevitore, Attributo, Bordo

Sto cercando di prendere il ripetuto Sender - Conta il conteggio e convertirli come bordi aggiuntivi.

df <- data.frame(sender = c(1,1,1,1,3,5), receiver = c(1,2,2,2,4,5), 
       attribute = c(12,12,12,12,13,13), edge = c(0,1,1,1,1,0)) 

    sender receiver attribute edge 
1  1  1  12 0 
2  1  2  12 1 
3  1  2  12 1 
4  1  2  12 1 
5  3  4  13 1 

Voglio che il risultato finale a guardare come questo:

sender receiver attribute edge 
1  1  1  12 0 
2  1  2  12 3 
3  3  4  13 1 

Quando fra duplicati mittente-ricevitori sono stati combinati e il numero di duplicati incorporati nel numero di spigoli.

Qualsiasi input sarebbe molto apprezzato.

Grazie!

risposta

6

plyr è un tuo amico, anche se penso che il tuo risultato finale non sia corretto dato i dati di input.

library(plyr) 

ddply(df, .(sender, receiver, attribute), summarize, edge = sum(edge)) 

Returns

sender receiver attribute edge 
1  1  1  12 0 
2  1  2  12 3 
3  3  4  13 1 
4  5  5  13 0 
+0

Penso che l'OP non intendesse raggruppare per 'sender + receiver + attribute', ma solo per' sender + receiver', e 'attribute' va avanti per il ride. Nell'esempio, 'attribute' sembra essere univoco per le coppie' sender + receiver', ma I * think * è stato accidentale –

19

Per divertimento, qui ci sono altre due opzioni, prima utilizzando la funzione di base aggregate() e la seconda con data.table pacchetto:

> aggregate(edge ~ sender + receiver + attribute, FUN = "sum", data = df) 
    sender receiver attribute edge 
1  1  1  12 0 
2  1  2  12 3 
3  3  4  13 1 
4  5  5  13 0 
> require(data.table) 
> dt <- data.table(df) 
> dt[, list(sumedge = sum(edge)), by = "sender, receiver, attribute"] 
    sender receiver attribute sumedge 
[1,]  1  1  12  0 
[2,]  1  2  12  3 
[3,]  3  4  13  1 
[4,]  5  5  13  0 

Per la cronaca, questa domanda è stato chiesto molte molte volte, sfogliando my own answers produce diverse risposte che ti indirizzano verso la giusta direzione.

+1

Qualsiasi risposta usando solo le funzioni di base ottiene sempre +1 da me. – CCC

Problemi correlati