10

data.table を使用して複数の列を集計する Rと同じ結果が必要ですが、いくつかの集計関数が必要です。

ここに例があります

data <- as.data.table(list(x1 = runif(200), x2 = 10*runif(200), group = factor(sample(letters[1:2]))))

res <- data[, rbindlist(lapply(.SD, function(x) {
              return(list(name = "varname", mean = mean(x), sd = sd(x)))
           }))
          , by = group, .SDcols = c("x1", "x2")
          ]

そして、次の結果を取得します。

   group    name      mean        sd
1:     b varname 0.5755798 0.2723767
2:     b varname 5.5108886 2.7649262
3:     a varname 0.4906111 0.3060961
4:     a varname 4.7780189 2.9740149

2 番目の列で列名 ('x1'、'x2') を取得するにはどうすればよいですか? 別のものに置き換える必要があると思いrbindlistますが、何ですか?簡単な解決策はありますか?

4

2 に答える 2

15

別の方法は、このラップを回避できるように独自の関数を構築することですrbindlist(これは不要であることがわかりました)。これにより、関数を自由に構築できます。

tmp <- function(x) { 
    mm <- colMeans(x)
    ss=sapply(x, sd)
    list(names=names(x), mean=mm, sd=ss)
}

data[, tmp(.SD), by=group]
   group names      mean        sd
1:     a    x1 0.4988514 0.2770122
2:     b    x1 0.5246786 0.3014248
3:     a    x2 4.8031253 2.7978401
4:     b    x2 4.9104108 2.9135656
于 2013-09-24T10:34:11.943 に答える