在R语言中按分组计算均值并合并至原数据集的方法
解决方案
要把分组计算的均值绑定到原数据集,核心是避免用summarise压缩行数,以下是两种常用方法:
方法一:直接用mutate生成均值列
mutate在分组后会保留原数据的所有行,为每组的每一行添加上对应组的均值:
library(dplyr) df <- data.frame( Cat = c("A","B","C","B","C","A","C","A","B"), Fre = c(9,5,0,2,7,8,1,3,7)) df_with_mean <- df %>% group_by(Cat) %>% mutate(Mean = round(mean(Fre), 2)) %>% # 保留两位小数匹配示例格式 ungroup() # 可选,取消分组状态 print(df_with_mean)
运行后输出就是你期望的结果:
Cat Fre Mean 1 A 9 6.67 2 B 5 4.67 3 C 0 2.67 4 B 2 4.67 5 C 7 2.67 6 A 8 6.67 7 C 1 2.67 8 A 3 6.67 9 B 7 4.67
方法二:先生成均值表再合并
如果需要单独保存分组均值的结果,可以先计算均值表,再通过left_join匹配到原数据:
# 生成分组均值表 mean_table <- df %>% group_by(Cat) %>% summarise(Mean = round(mean(Fre), 2)) %>% ungroup() # 合并到原数据集 df_with_mean <- df %>% left_join(mean_table, by = "Cat") print(df_with_mean)
这种方法会得到和方法一完全一样的输出,适合需要复用均值表的场景。
内容的提问来源于stack exchange,提问作者iGada
相关产品推荐
相关产品推荐

