如何按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)