R语言处理骑行用户CSV数据:创建堆叠柱状图并保存PNG求助
问题分析与修复方案
核心问题梳理
- 代码逻辑顺序颠倒:先调用未定义的
combined_df计算年龄,正确流程应为先合并数据再计算年龄 - 数据合并错误:错误将单独生成的
age数据框与原始数据绑定,导致数据结构混乱 - 缺失年龄过滤:未实现
年龄≤85的有效数据筛选 - 图表不符合需求:原代码X轴用
age,但要求是X轴为gender的堆叠柱状图 - 空值标签残留:仅用
drop_na(gender)无法处理空白字符串类型的空值(非NA)
修正后的完整代码
# 加载必备工具包 library(tidyverse) # 批量读取4份CSV并仅保留需要的字段 df_list <- list( read.csv("D:/Projects/Cyclists/Divvy_Trips_2016_Q1Q2/Divvy_Trips_2016_Q1.csv"), read.csv("D:/Projects/Cyclists/Divvy_Trips_2016_Q1Q2/Divvy_Trips_2016_04.csv"), read.csv("D:/Projects/Cyclists/Divvy_Trips_2016_Q1Q2/Divvy_Trips_2016_05.csv"), read.csv("D:/Projects/Cyclists/Divvy_Trips_2016_Q1Q2/Divvy_Trips_2016_06.csv") ) %>% map(~select(., birthyear, gender)) # 合并数据、计算年龄、过滤有效记录 combined_df <- bind_rows(df_list) %>% mutate(age = 2016 - birthyear) %>% # 过滤年龄≤85、无空值的有效数据,同时处理空白字符串类型的gender空值 filter(age <= 85, !is.na(gender), !is.na(birthyear), gender != "") # 创建符合要求的堆叠柱状图:X轴为gender,按年龄区间堆叠展示 combined_df %>% mutate(age_group = cut(age, breaks = seq(0, 85, 10), include.lowest = TRUE)) %>% ggplot(aes(x = gender, fill = age_group)) + geom_bar(position = "stack") + labs(title = "不同性别骑行用户年龄分布", x = "性别", y = "用户计数") + theme_minimal() # 保存图表为PNG格式 ggsave("gender_age_stack.png", width = 8, height = 6, dpi = 300)
关键修复说明
数据处理流程优化:
- 用
list+map批量读取文件,避免重复代码;合并后再计算年龄,解决未定义变量错误 - 多条件过滤同时处理年龄异常、NA值和空白字符串,彻底清除无效数据
- 用
图表修正:
- 将X轴改为
gender,按10岁区间划分年龄实现堆叠效果(若不需要区间,可直接用age作为填充项) - 添加标题和坐标轴标签,提升图表可读性
- 将X轴改为
保存逻辑修复:
- 确保
ggplot绘图代码与ggsave连贯执行,避免保存错误图表
- 确保
内容的提问来源于stack exchange,提问作者SamDeCarv
相关产品推荐
相关产品推荐

