想象一下数据表
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)]
答案 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))