You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

关键修复说明

  1. 数据处理流程优化:

    • 用list+map批量读取文件,避免重复代码;合并后再计算年龄,解决未定义变量错误
    • 多条件过滤同时处理年龄异常、NA值和空白字符串,彻底清除无效数据
  2. 图表修正:

    • 将X轴改为gender,按10岁区间划分年龄实现堆叠效果(若不需要区间,可直接用age作为填充项)
    • 添加标题和坐标轴标签,提升图表可读性
  3. 保存逻辑修复:

    • 确保ggplot绘图代码与ggsave连贯执行,避免保存错误图表

内容的提问来源于stack exchange,提问作者SamDeCarv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 02:20:31