想象一下数据表
ID Score
1 10
1 13
1 12
2 10
3 6
3 6
此表的average
为9.5。这很容易使用mean
。
如果我想要每个唯一身份用户的平均值,该怎么办?
用户1的平均值是11.67。 用户2的平均值为10。 用户3的平均值为6.
我正在寻找UniqAverage
((11.67+10+6)/3) =
9.223`
使用循环这很简单,但是对于我的巨型数据集,我想继续努力学习在R中使用向量的“正确”方法。
我们甚至可以假设我已经有一个名为Uniq的变量,其中包含Uniq ID的数量,如果有帮助的话。
出于复制目的,请随意使用...
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)
我最近失败的尝试是
mean( dt[ unique(dt$ID), Score1] )
我认为每个ID都会取得Score1的平均值,但它并没有完全奏效。我得到11.67
的结果是错误的。
答案 0 :(得分:3)
总体意思是:
dt[,mean(Score1)];
## [1] 9.5
按ID计算:
dt[,mean(Score1),ID];
## ID V1
## 1: 1 11.66667
## 2: 2 10.00000
## 3: 3 6.00000
均值意味着:
dt[,mean(Score1),ID][,mean(V1)];
## [1] 9.222222
答案 1 :(得分:1)
使用dplyr
library(dplyr)
res <- dt %>%
group_by(ID) %>%
summarise(Mean = mean(Score1))
res
# ID Mean
# (dbl) (dbl)
#1 1 11.66667
#2 2 10.00000
#3 3 6.00000
平均值
res %>%
.$Mean %>%
mean
#[1] 9.222222