根据键控行的聚合返回行的子集

时间:2016-08-24 07:57:35

标签: r key data.table aggregate subset

我想基于行子集上的聚合函数,在每个子集内对R中的数据表进行子集化。例如,对于每个键,返回大于仅针对子集中的行计算的字段的平均值的所有值。例如:

library(data.table)
t=data.table(Group=rep(c(1:5),each=5),Detail=c(1:25))
setkey(t,'Group')
library(foreach)
library(dplyr)

ret=foreach(grp=t[,unique(Group)],.combine=bind_rows,.multicombine=T) %do% 
  t[Group==grp&Detail>t[Group==grp,mean(Detail)],]
#        Group Detail
# 1:     1      4
# 2:     1      5
# 3:     2      9
# 4:     2     10
# 5:     3     14
# 6:     3     15
# 7:     4     19
# 8:     4     20
# 9:     5     24
#10:     5     25

问题是,是否可以使用data.table功能简洁地编码最后两行?很抱歉,如果这是重复,我也在努力解释谷歌/ stackoverflow找到它的确切目标。

1 个答案:

答案 0 :(得分:1)

使用.SD功能。不知道,谢谢:

dt[, .SD[Detail > mean(Detail)], by = Group] 

同样有效,但有一些性能提升:

indx <- dt[, .I[Detail > mean(Detail)], by = Group]$V1 ; dt[indx]