This question already has answers here:
How to call a function that returns multiple rows and columns in a data.table?

(2个答案)


7年前关闭。




我希望获得与oj​​it_a相同的结果,但需要几个汇总函数。

这是一个例子
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

如何在第二列中获取列名(“x1”,“x2”)?我想我需要用rbindlist代替其他东西,但是呢?有没有简单的解决方案?

最佳答案

另一种方法是构造自己的函数,这样就可以避免这种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

关于R带有data.table的多个列的多个统计信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18978437/

10-09 13:38