2013-08-06 15 views
14

Ich mag würde das Äquivalent der folgenden tun, sondern mit data.table der „durch“:Aggregate alle Spalten mit data.table

dt <- data.table(V1 = rnorm(100), V2 = rnorm(100), V3 = rnorm(100), 
    group = rbinom(100,2,.5)) 
dt.agg <- aggregate(dt, by=list(dt$group), FUN=mean) 

Ich weiß, dass ich dies tun könnte:

dt.agg <- dt[, list(V1=mean(V1), V2=mean(V2), V3=mean(V3)), by=group] 

Aber für den Fall, ich überlege, ich habe 100 oder so Spalten V1-V100 (und ich möchte immer alle von ihnen durch einen einzigen Faktor aggregieren, wie in aggregate oben) so die data.table Lösung, die ich habe oben ist nicht machbar.

+8

Als Referenz unter den reichlich Beispiele in 'data.table' ist folgende:' DT [, lapply (.SD, sum) von = x ] '. – joran

+0

@joran, könnten Sie bitte die Rolle von .SD erklären? – POTENZA

+0

'.SD' bezieht sich auf eine Teilmenge von Daten. –

Antwort

32
dt[, lapply(.SD, mean), by=group] 

Spalten Um specifiy:

dt[,...,by=group, .SDcols=c("V1", "V2", "V3", ...)] 
dt[,...,by=group, .SDcols=names(dt)[1:100]] 
Verwandte Themen