1
我有一个data.table,并希望在多个列上运行多个聚合,同时该表被分组到另一个变量上。我曾尝试以下:组上多个变量的多个聚合
library(data.table)
DT <- data.table(a = 1:10,
b = 10:1,
group = rep(1:2, each=5))
aggs <- function(x) list(mean = mean(x), sd = sd(x))
DT[, lapply(.SD, aggs), .(group), .SDcols = c('a', 'b')]
这并不完全工作,因为我要么需要names()
的列或输出拆分成列 - 说a.mean
,b.mean
等:
group a b
1: 1 3 8
2: 1 1.581139 1.581139
3: 2 8 3
4: 2 1.581139 1.581139
关于[这个答案](https://stackoverflow.com/questions/42163675/data-table-lapply-a-function-with-multicolumn-output#42164417) - 也许'熔化(DT ,id =“group”)[,Reduce(c,lapply(.SD,aggs)),“group,variable”]或dcast(melt(DT,id =“group”)[,Reduce(c,lapply (.SD,aggs)),“group,variable”],group_variable,value.var = c(“mean”,“sd”))'? – lukeA
@lukeA我想没有必要融化。类似于dcast(DT,group〜。,fun = list(mean,sd),value.var = c(“a”,“b”))“尽管没有OP的首选col名称。 – Frank
转换为宽格式通常是一个坏主意,因为使用结果数据集进行进一步分析实际上是不可能的。 –