【发布时间】:2017-11-02 11:06:35
【问题描述】:
假设有一个data.table,其 ID 为 1,2 和 3,还有一个 VALUE 列。还有一个这些 ID 的排列列表,这些 ID 定义了我要为其计算统计数据的子集。例如。计算 {1 ,2}、{2 和 3}、{1 和 3} 中三个组 ID 的 VALUE 平均值:
library(data.table)
DT <- data.table(ID = c(1,1,2,2,3,3),VALUE = c(1,2,10,20,100,200))
permutations <- list(c(1,2),c(2,3),c(1,3))
如何生成所需的输出
permutation MEAN
1 8.25
2 82.5
3 75.75
我的没有循环或apply 的伪代码看起来像这样,但它当然不起作用:
DT[,.(MEAN = mean(VALUE)),by = .(ID %in% permutations)]
是否可以在没有循环或调用应用的情况下做到这一点?我的桌子需要很长时间。
【问题讨论】:
-
试试
DT[stack(setNames(permutations, seq_along(permutations))), on = .(ID = values)][, .(MEAN = mean(VALUE)), by = .(permutation = ind)] -
@akrun 我认为这是最好的方式,值得发帖。
标签: r data.table apply