如何在R语言中基于另一变量创建新变量:按v1分组求v2均值
按分组计算均值并添加到原数据框的R实现
原始数据
df <- data.frame(id=c(1,2,3,4,5), v1=c(2020,2020,2021,2021,2022), v2=c(12,5,66,17,17))
解决方案
方法1:Base R 原生实现
使用ave()函数可以快速按分组计算均值,并将结果匹配到原数据的每一行:
df$avg_by_yr <- ave(df$v2, df$v1, FUN = mean)
运行后查看结果:
print(df) # id v1 v2 avg_by_yr # 1 1 2020 12 8.5 # 2 2 2020 5 8.5 # 3 3 2021 66 41.5 # 4 4 2021 17 41.5 # 5 5 2022 17 17.0
方法2:dplyr 包实现(tidyverse 风格)
如果习惯使用tidyverse生态的语法,可通过分组后添加新列的方式实现:
- 先加载dplyr包:
library(dplyr)
- 执行分组计算:
df <- df %>% group_by(v1) %>% mutate(avg_by_yr = mean(v2)) %>% ungroup()
此方法同样能得到目标格式的结果。
内容的提问来源于stack exchange,提问作者iGada
相关产品推荐
相关产品推荐

