使用data.table进行多个聚合步骤

时间:2013-11-08 04:28:03

标签: r aggregate data.table

我正在尝试使用data.table执行多个聚合步骤。首先,我想通过平板找到特定类型样品的每个浓度的中值,然后我想找到每个平板的最大中值。

library(data.table)

set.seed(1)
DT <- data.table(plate = rep(paste0("plate",1:3),each=11),
                 type = rep(c(rep(1,9),2,2),3),
                 value = sample(1:25,33,replace=TRUE),
                 conc = rep(c(rep(1:3,each=3),4,4),3)
                 )

我得到以下工作:

DT[,med := median(value[type==1]),by=list(plate,conc)]
DT[,max := max(med,na.rm=TRUE),by=plate]

是否可以在不添加中间med列的情况下执行多步聚合?

1 个答案:

答案 0 :(得分:3)

你可以,例如执行以下操作:

DT[, max := max(.SD[, median(value[type == 1]), by = conc]$V1, na.rm = T),
     by = plate]

但我很确定你的两条路线要快得多。