在分组变量列表上汇总列

时间:2017-11-02 11:06:35

标签: r data.table apply

假设data.table有ID 1,2和3以及VALUE列。还有一个这些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)]

是否可以在没有循环或应用调用的情况下执行此操作?我的桌子需要很长时间。

2 个答案:

答案 0 :(得分:1)

基础R方法是,

sapply(permutations, function(i) {x <- DT[DT$ID %in% i]; mean(x$VALUE)})
#[1]  8.25 82.50 75.75

答案 1 :(得分:1)

我们可以将'data.table'与'permutations'结合起来,然后将其转换为'data.frame',然后按mean

进行分组
DT[stack(setNames(permutations, seq_along(permutations))), 
     on = .(ID = values)][, .(MEAN = mean(VALUE)), by = .(permutation = ind)] 
#   permutation  MEAN
#1:           1  8.25
#2:           2 82.50
#3:           3 75.75