1
我想根据行子集上的聚合函数在每个子集内的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找到它。
'DT [,.SD [查看详细>平均值(详细信息),通过=集团]'也许? (我已将't'重命名为'dt',因为't'是R中的一个函数)。您还可以通过= Group] $ V1;执行indx < - dt [,.I [Detail> mean(Detail)]。 dt [indx]'为了获得一些性能 –
谢谢大卫,是的,我没有真正运行代码,只是写了一个例子(t转置)。我检查了你的答案,看起来不错。 –
使用'data.table' v> = 1.9.7,你也可以做一个非equi连接,比如'res < - dt [,mean(Detail),by = Group]; dt [res,。(Group,x.Detail),on =。(Group,Detail> V1)]' –