2013-08-06 95 views
14

所有列我想要做以下的相當,但與data.table的「經」:骨料與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) 

我知道我能做到這一點:

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

但是對於這種情況,我正在考慮我有100列左右的V1-V100(我總是希望通過單一因子來聚合所有這些數據,就像上面的聚合數據一樣),所以我得到的data.table解決方案以上是不可行的。

+8

作爲參考,如下:'DT [,lapply(.SD,總和),由= X ]'。 – joran

+0

@joran,你能解釋一下.SD的作用嗎? – POTENZA

+0

'.SD'是指數據的子集。 –

回答

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

要specifiy列:在`data.table`的豐富實例中

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