【发布时间】:2016-04-17 11:19:49
【问题描述】:
想象一个数据表
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)]
【问题讨论】:
-
在大多数(如果不是全部)情况下,不建议计算平均值。见ksrowell.com/blog-visualizing-data/2014/05/09/…
-
是的。这比我所拥有的要简单得多。我现在通过 dt[ dt[,Score1>10], mean(Score1), ID] 让它工作了
-
你可以构造一个像
dt = data.table(...)这样的例子。无需以df = data.frame(..)开头。 -
为什么是
dt[ dt[,Score1>10], mean(Score1), ID]?为什么不dt[Score1>10, mean(Score1), ID]
标签: r data.table