我正在尝试使用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
列的情况下执行多步聚合?
答案 0 :(得分:3)
你可以,例如执行以下操作:
DT[, max := max(.SD[, median(value[type == 1]), by = conc]$V1, na.rm = T),
by = plate]
但我很确定你的两条路线要快得多。