基于单元格引用的条件均值:为iris数据集添加分类均值列
按分类为数据集添加对应均值列(iris示例)
方法1:使用dplyr的分组计算(推荐,匹配你现有代码风格)
通过group_by()按Species分组,再用mutate()计算每组的Petal.Width均值,组内所有行都会自动填充对应组的均值:
library(datasets) library(dplyr) # 需要加载dplyr包 # 生成包含分类均值的新列 iris_with_avg <- iris %>% group_by(Species) %>% mutate(spec_avg_pet_width = mean(Petal.Width, na.rm = TRUE)) %>% ungroup() # 取消分组,避免影响后续操作 # 查看结果 head(iris_with_avg)
方法2:基础R的ave函数(无需额外包)
如果不想加载dplyr,用基础R的ave()函数也能实现,它会自动按分组计算并重复填充均值:
library(datasets) iris$spec_avg_pet_width <- ave(iris$Petal.Width, iris$Species, FUN = mean) # 验证分组均值结果 unique(iris[, c("Species", "spec_avg_pet_width")])
结果说明
两种方法都会得到你期望的对应值:
- setosa组:0.246
- versicolor组:1.326
- virginica组:2.026
新增列可直接用于ggplot的分类排序,完全等效于Excel的AverageIfs功能。
内容的提问来源于stack exchange,提问作者ocwa80
相关产品推荐
相关产品推荐

