r - 从 r 中的均值计算总均值

标签 r aggregate

我正在尝试从学生的平均分数中汇总一个总平均值。这是我的数据集的样子:

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/

相关文章:

javascript - 如何在 JS 中聚合每周的天数数组?

r - 转置 R 中列表的元素

r - R中xtabs和聚合之间的na.action不一致

c++ - 列出聚合的初始化 : when can it invoke copy constructor?

r - 在R中将多页pdf的每一页转换为单独的png文件

mongodb - 在 Mongo 聚合中,可以通过分组生成 3 个不同的计数

python - 如何通过多列中的唯一索引在 Pandas 中求和?

r - 将大矩阵的每个单元格除以其行的总和

r - R中是否有另一个类似外部的函数用于多个向量

r - 导入命名空间和描述问题?