2012-12-17 16 views
7

Ich versuche data.table in R zu verwenden, um die folgenden Datentabelle zusammenfassen:Summarize basiert auf zwei Gruppenvariablen in R mit 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. 

Es gibt 668.944 Beobachtungen, 43 Standorte, 3 Gruppen, und 19 Variablen. Ich möchte die Ergebnisse einer Funktion erhalten (z. B. mean), die jede Spalte/Variable nach Site und Gruppe zusammenfasst. Also sollte es 43 Seiten x 3 Gruppen x # zusammenfassende Statistiken geben (z.B. mean). Ich habe den folgenden Code verwendet:

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"] 

Mit dem oben genannten, bekomme ich 43 Seiten, aber nicht die 3 Gruppen, die ich suchte. Ich konnte die ursprüngliche Datentabelle in die drei Gruppen aufteilen, aber ich fragte mich, ob es eine Möglichkeit der Zusammenfassung mit zwei Variablen (SiteNo und Group) mit data.table gab.

Ich bin immer noch RTM auf data.table, aber bis jetzt habe ich nicht die Antwort auf die oben genannten gefunden.

Antwort

11

Versuchen Sie, Ihre Schlüssel sowohl für "Gruppe" und "SiteNo" -Einstellung:

Aus dem Beispiel unter ?key:

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

Dann verwenden by wie:

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

Alternativ Sie können verwenden:

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

oder

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