Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于键控行的聚合返回行的子集_R_Key_Data.table_Aggregate_Subset - Fatal编程技术网

R 基于键控行的聚合返回行的子集

R 基于键控行的聚合返回行的子集,r,key,data.table,aggregate,subset,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,.

我想根据行子集上的聚合函数,在每个子集中的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功能简洁地编码最后两行?抱歉,如果这是重复的话,我也在努力解释让google/stackoverflow找到它的确切目标。

使用.SD函数可以工作。我不知道,谢谢:

dt[, .SD[Detail > mean(Detail)], by = Group] 
也可以工作,但性能有所提高:

indx <- dt[, .I[Detail > mean(Detail)], by = Group]$V1 ; dt[indx]
indx平均值(细节)],by=组]$V1;dt[indx]

dt[,.SD[细节>平均值(细节)],by=Group]
可能吗?(我将
t
重命名为
dt
,因为
t
是R中的一个函数)。你也可以做
indx-mean(Detail)],by=Group]$V1;dt[indx]
为了获得一些性能,KS David,是的,我没有真正运行代码,只是编写了一个示例(t作为转置)。我检查了你的答案,看起来很棒。使用
data.table
v>=1.9.7,你也可以进行非等联接,例如
res V1]