R语言中如何按类别分组为数据框添加分组平均值列
问题原因
你之前的代码直接对data.frameOG的全量Size列求均值,没有做按类别分组、以及两个数据框按类别匹配的逻辑,所以所有行都会被填充同一个全局平均值,无法得到分组级别的均值结果。
实现前先确认:两个数据框都存相同含义的类别列(下文示例统一用category代指该列名,你替换成自己数据里实际的列名即可)。
实现方法
Base R 原生实现(无需安装额外包)
- 先在原始数据框中按类别计算分组平均Size
# 按category列分组,对每组的Size求均值 category_mean <- aggregate( formula = Size ~ category, data = data.frameOG, FUN = mean, na.rm = TRUE # 若Size列存在缺失值,加该参数自动忽略缺失值计算 )
- 将分组均值按类别匹配到绘图用的目标数据框
data.frame$averagesize <- category_mean$Size[match(data.frame$category, category_mean$category)]
dplyr 实现(代码更简洁,适合日常数据处理流程)
先加载dplyr包,通过左连接直接把分组计算好的均值合并到目标数据框:
library(dplyr) data.frame <- data.frame %>% left_join( data.frameOG %>% group_by(category) %>% summarise(averagesize = mean(Size, na.rm = TRUE)), by = "category" )
注意事项
- 匹配前建议先检查两个数据框的类别列取值是否一致,若存在某类别只在一个数据框中出现的情况,匹配后对应行的averagesize会返回NA,需要提前处理类别取值不一致的问题。
- 不要直接对未分组的全量列调用
mean()赋值,该操作不会自动按行匹配类别属性,只会把单一的全局计算结果填充到整列。
内容的提问来源于stack exchange,提问作者timeywimey
相关产品推荐
相关产品推荐

