R - data.table - 计算uniq-columns平均分数的平均分数

时间:2016-04-16 19:09:40

标签: r data.table unique

想象一下数据表

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的结果是错误的。

2 个答案:

答案 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