17

次のサンプルがありますdata.table

dtb <- data.table(a=sample(1:100,100), b=sample(1:100,100), id=rep(1:10,10))

たとえば、 を使用して、すべての列 (a と b は別々にしておく必要がありますが) を id で集約したいと思いますcolSums。これを行う正しい方法は何ですか?以下は機能しません。

 dtb[,colSums, by="id"]

これは単なるサンプルであり、私のテーブルには多くの列があるため、関数名でそれらすべてを指定することは避けたい

4

2 に答える 2

30

これは実際に私が探していたものであり、FAQ に記載されています。

dtb[,lapply(.SD,mean),by="id"]
于 2012-07-29T23:27:47.697 に答える
0

この場合、最初にデータを長い形式にし、次に集計を行うのが最も速いと思います(このSO投稿のMatthewのコメントを参照してください)。

library(data.table)
dtb <- data.table(a=sample(1:100,100), b=sample(1:100,100), id=rep(1:10,10))
library(reshape2)
dt_long <- as.data.table(melt(dtb, id.var="id"))
dt_long[, sum(value), by=c("id","variable")]
    id variable  V1
 1:  1        a 601
 2:  2        a 440
 3:  3        a 496
 4:  4        a 553
 5:  5        a 444
 6:  6        a 466
 7:  7        a 525
 8:  8        a 553
 9:  9        a 541
...
于 2012-07-28T06:50:13.547 に答える