【发布时间】:2017-07-07 21:15:58
【问题描述】:
我有一个 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
【问题讨论】:
-
关于this answer - 也许是
melt(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 我想没有必要融化。
dcast(DT, group ~ ., fun = list(mean, sd), value.var = c("a","b"))之类的东西,尽管不是 OP 的首选 col 名称。 -
转换为宽格式通常是个坏主意,因为实际上不可能使用生成的数据集进行进一步分析。
标签: r data.table