具有子集的平均值

时间:2016-04-16 20:56:57

标签: r data.table

想象一下数据表

ID    Score
1     10
1     13
1     12
2     10
3     6
3     6

用户1的平均值是11.67。用户2的平均值为10.用户3的平均值为6.

我正在寻找的UniqAverage将是((11.67 + 10 + 6)/ 3)= 9.223`

出于复制目的,请随意使用...

library(data.table)
df = data.frame( ID=c(1,1,1,2,3,3), Score1=c(10,13,12,10,6,6) ) 
dt = data.table(df)

之前的一个问题导致我学会了我能做到

dt[, mean(Score1), ID][,mean(V1)]

按ID获得此平均值。

然而,如果我只想要分数的平均值> 10?

所以我结束了

ID    V1
1     12.5
2     0
3     0

所以我的最终结果是4.167

尝试使用哪个失败。

dt[, mean( which(Score1) > 10 ), ID][,mean(V1)]

2 个答案:

答案 0 :(得分:2)

我们可以join获取unique'ID'的数据集后获得{1}的'Score1''ID',其中“Score1”大于10。

mean

答案 1 :(得分:0)

这是一个基数为R且aggregate的解决方案:

x <- aggregate(df, list(df$ID), function(x) mean(ifelse(x > 10, x, NA), na.rm = T))[,3]
mean(ifelse(is.na(x), 0, x))