2012-12-17 16 views
7

Sto cercando di utilizzare data.table in R per riassumere la seguente tabella di dati:Riassumere in base a due variabili di raggruppamento in R utilizzando data.table

SiteNo Var1 Var2 Var3 ... Var18 Group 
1  0.1 0.3 1   0.3  1 
2  0.3 0.1 0.9  0.2  1 
etc. 

ci sono 668,944 osservazioni, 43 siti, 3 gruppi, e 19 variabili. Mi piacerebbe ottenere i risultati di una funzione (ad esempio, mean) che riepiloga ogni colonna/variabile in base al sito e al gruppo. Pertanto, dovrebbero esserci 43 siti x 3 gruppi x # di statistiche riassuntive (ad es., mean). Ho usato il seguente codice:

e.dt<-data.table(e) 
setkey(e.dt, Group) # set key to group number 

# get mean for each column/variable 
e.dt.mean<-e.dt[,lapply(.SD,mean), by="SiteNo"] 

Utilizzando quanto sopra, ottengo 43 siti, ma non i 3 gruppi che cercavo. Potrei dividere la tabella dei dati originale in tre gruppi, ma mi chiedevo se esistesse un modo per riepilogare usando due variabili (SiteNo e Group) usando data.table.

Sono ancora RTM su data.table, ma finora non ho trovato la risposta a quanto sopra.

risposta

11

provare a impostare la chiave per entrambi "gruppo" e "SiteNo":

Dall'esempio sotto ?key:

keycols <- c("SiteNo", "Group") 
setkeyv(e.dt, keycols) 

Poi, utilizzare by come:

e.dt[, lapply(.SD,mean), by = key(e.dt)] 

In alternativa, è possibile utilizzare:

e.dt[, lapply(.SD,mean), by = "SiteNo,Group"] 

o

e.dt[, lapply(.SD, mean), by = list(SiteNo, Group)] 
Problemi correlati