我正在尝试从学生的平均分数中汇总一个总平均值。这是我的数据集的样子:
id <- c(1,1,1, 2,2,2, 3,3, 4,4,4)
mean <- c(5,5,5, 6,6,6, 7,7, 8,8,8)
data <- data.frame(id,mean)
> data
id mean
1 1 5
2 1 5
3 1 5
4 2 6
5 2 6
6 2 6
7 3 7
8 3 7
9 4 8
10 4 8
11 4 8
我正在使用 dplyr
包进行此计算。我用这个,
data %>%
mutate(grand.mean = mean(mean))
id mean grand.mean
1 1 5 6.454545
2 1 5 6.454545
3 1 5 6.454545
4 2 6 6.454545
5 2 6 6.454545
6 2 6 6.454545
7 3 7 6.454545
8 3 7 6.454545
9 4 8 6.454545
10 4 8 6.454545
11 4 8 6.454545
但是,这并没有考虑每个id的重复均值。计算应该从每个 id 中获取独特的方法并对它们进行平均。
所以它是 (5+6+7+8)/4 = 6.5
而不是 6.45
。
有什么想法吗? 谢谢!
最佳答案
如果 mean
有重复项在不同的'id'中,使用match
获得第一个'id'的位置并获得mean
“均值”列的
library(dplyr)
data %>%
mutate(grand.mean = mean(mean[match(unique(id), id)]))
# id mean grand.mean
#1 1 5 6.5
#2 1 5 6.5
#3 1 5 6.5
#4 2 6 6.5
#5 2 6 6.5
#6 2 6 6.5
#7 3 7 6.5
#8 3 7 6.5
#9 4 8 6.5
#10 4 8 6.5
#11 4 8 6.5
或者另一个选项是 duplicated
data %>%
mutate(grand.mean = mean(mean[!duplicated(id)]))
或乘坐distinct
行。 'id','mean',得到 mean
, 并将列与原始数据集绑定(bind)
library(tidyr)
data %>%
distinct(id, mean) %>%
summarise(grand.mean = mean(mean)) %>%
uncount(nrow(data)) %>%
bind_cols(data, .)
关于r - 从 r 中的均值计算总均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59977024/