2013-08-06 5 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を持っていると考えています(そして、私は常に上記の集計のように1つの要素ですべてを集計したいと思います)。上記は実現可能ではない。 ?

+8

は、以下の通りである:' lapply DT [(.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]]