如何在R中按自定义规则对月份类数据项分组、计算组均值并完成可视化绘图
R语言月份分组计算均值并绘图的实现方案
前置说明
- 你提供的原始向量长度不匹配(Month共12个、year共2个、Values共16个),直接构建数据集会触发R的长度不等报错,后续示例先按观测对齐的逻辑搭建可运行的长表结构,分组、计算、绘图的通用逻辑可直接套用到你的真实数据集上
- 分组规则完全匹配需求:1-4月为第一组、5-8月为第二组、9-12月为第三组
第一步:加载依赖包,搭建规范数据集
# 加载工具包 library(dplyr) # 用于数据分组、聚合计算 library(ggplot2) # 用于可视化绘图 # 整理长度对齐的示例数据集,真实数据可直接替换原向量内容 Month<-c("January","February","March","April","May","June","July","August","September","October","November","December", "January","February","March","April") year<-c(rep(2020,12), rep(2021,4)) Values<-c(29,43,75,37,89,88,45,64,24,15,26,35,78,93,86,90) # 整合为标准数据框 df <- data.frame(Month, year, Values)
第二步:按规则为月份匹配分组标签
通过建立英文月份和自然月序号的映射关系,避免字符串匹配出错,再按要求划分三个组别:
# 构建月份与自然月序号的对应关系 month_seq <- c("January"=1, "February"=2, "March"=3, "April"=4, "May"=5, "June"=6, "July"=7, "August"=8, "September"=9, "October"=10, "November"=11, "December"=12) df$month_num <- month_seq[df$Month] # 划分目标分组 df <- df %>% mutate(month_group = case_when( month_num %in% 1:4 ~ "1-4月", month_num %in% 5:8 ~ "5-8月", month_num %in% 9:12 ~ "9-12月" ))
第三步:计算分组对应的平均值
可按需选择计算维度:
- 分年份统计每个月份组的均值
# 按年份+分组维度计算均值 group_mean_by_year <- df %>% group_by(month_group, year) %>% summarise(avg_value = mean(Values), .groups = "drop")
- 跨年份统计每个月份组的整体均值
# 仅按分组维度计算全量数据的均值 group_mean_overall <- df %>% group_by(month_group) %>% summarise(avg_value = mean(Values), .groups = "drop")
第四步:基于分组均值绘图
提供两种常用绘图场景的代码,可按需调整样式参数:
- 分年份对比的分组均值柱状图
ggplot(group_mean_by_year, aes(x = month_group, y = avg_value, fill = factor(year))) + geom_col(position = position_dodge(0.7), width = 0.6) + labs(x = "月份分组", y = "数值平均值", fill = "统计年份") + theme_bw()
- 全量数据下的整体分组均值柱状图
ggplot(group_mean_overall, aes(x = month_group, y = avg_value)) + geom_col(fill = "#2c7fb8", width = 0.6) + labs(x = "月份分组", y = "全量数据的数值平均值") + theme_bw()
注意:如果你的数据集使用中文月份字段,仅需调整
month_seq中的映射内容,其余分组、计算、绘图逻辑无需修改。
内容的提问来源于stack exchange,提问作者Gokul
相关产品推荐
相关产品推荐

