如何按ID分组行并计算平均值和IQR

如何按ID分组行并计算平均值和IQR,r,mean,data-cleaning,reshape2,iqr,R,Mean,Data Cleaning,Reshape2,Iqr,我有一个长格式的数据框,我的数据,其中有101名参与者,每个参与者在51次试验(事件)中获得分数,如下所示: dput(head(mydata,200)) 我想计算51次试验中每个参与者的得分的平均值和四分位数范围,此处标记为事件。然后,我想删除参与者的得分超出四分位数范围±3的观察结果 最有效的方法是什么 我已经研究了restrape2中的cast函数,希望首先将数据帧转换为宽格式,但我没有成功 我还研究了按参与者对行进行分组,但还没有找到足够清晰的教程来指导我完成这项工作。以下是问题要求的内

我有一个长格式的数据框,
我的数据
,其中有101名参与者,每个参与者在51次试验(
事件
)中获得分数,如下所示:

dput(head(mydata,200))

我想计算51次试验中每个
参与者的
得分的平均值和四分位数范围,此处标记为
事件
。然后,我想删除参与者的
得分
超出四分位数范围±3的观察结果

最有效的方法是什么

我已经研究了
restrape2
中的
cast
函数,希望首先将数据帧转换为宽格式,但我没有成功


我还研究了按
参与者
对行进行分组,但还没有找到足够清晰的教程来指导我完成这项工作。

以下是问题要求的内容,按
参与者
分数进行分组

agg <- aggregate(Score ~ Participant, mydata, function(x){
  qq <- quantile(x, probs = c(1, 3)/4)
  iqr <- diff(qq)
  lo <- qq[1] - 1.5*iqr
  hi <- qq[2] + 1.5*iqr
   c(Mean = mean(x), IQR = unname(iqr), lower = lo, high = hi)
 }) 

agg <- cbind(agg[1], agg[[2]])
agg
#  Participant       Mean  IQR lower.25% high.75%
#1           1  0.3529412  0.0      0.00     0.00
#2           2 12.4117647 18.5    -27.75    46.25
#3           3 13.6666667 17.5    -26.25    43.75
#4           4 12.4255319 17.0    -22.50    45.50
最后的清理

rm(inx, mrg)

您想按
事件
分组还是仅按
参与者
分组?仅按
参与者
分组。因此,我想要51次试验(
事件
)中每个参与者的
得分的平均值和IQR
mrg <- merge(mydata, agg[c(1, 4, 5)])
inx <- apply(mrg[c(2, 4, 5)], 1, function(x) x[1] < x[2] | x[1] > x[3])
result <- mydata[!inx, ]
row.names(result) <- NULL

head(result)
#  Participant Score Event
#1           1     0     1
#2           1     0     2
#3           1     0     3
#4           1     0     4
#5           1     0     5
#6           1     0     6
rm(inx, mrg)