r - 从 r 中的均值计算总均值
问题描述
我正在尝试从学生的平均分数中汇总一个总平均值。这是我的数据集的样子:
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
'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
, 并将列与原始数据集绑定
library(tidyr)
data %>%
distinct(id, mean) %>%
summarise(grand.mean = mean(mean)) %>%
uncount(nrow(data)) %>%
bind_cols(data, .)
推荐阅读
- vue.js - 如何在 vue 的其他地方渲染 div/component?
- php - PHP 中的 curl 是否会向客户端显示辅助 IP 地址的地址?
- apache-nifi - 在 Nifi 中修改 JSON 键值对
- kubernetes - 如何在 Kubernetes 中公开服务?
- python - 使用 Python boto3 读取 JSON 文件
- html - 如何在 3 列 css flex 框中制作动态宽度 div
- javascript - `chrome.runtime.sendNativeMessage('com.add0n.node'` 在网络扩展中是什么意思
- docker - Dockerfiles 共享相同的指令,但从不同的图像构建
- c++ - 错误无法转换 'coll'(类型 'std::__cxx11::list
') 输入'const char&' - python - 管理站点不工作并抛出关于其中一个视图的错误,但视图仍在工作 django