如何用R语言分组特定天数并求和对应列以绘制直方图
合并6及以上天数为一组的处理方法
问题分析
你之前的代码报错原因是:直接对df$days向量调用summarise(该函数仅适用于数据框),且修改列与汇总的逻辑不连贯,导致语法错误。
简便处理方法(推荐用dplyr)
借助dplyr的链式操作可以快速完成分组汇总,同时保证输出顺序符合需求:
library(dplyr) # 处理分组并汇总 df_processed <- df %>% # 将大于5的days替换为"6+",统一转为字符类型避免类型冲突 mutate(days = ifelse(days > 5, "6+", as.character(days))) %>% # 按修改后的days分组 group_by(days) %>% # 每组求和n,汇总后取消分组 summarise(n = sum(n), .groups = 'drop') %>% # 按指定顺序排列,保证"6+"排在最后 arrange(match(days, c("0","1","2","3","4","5","6+")))
运行后df_processed的结果就是你需要的格式:
| days | n |
|---|---|
| 0 | 408 |
| 1 | 51 |
| 2 | 103 |
| 3 | 112 |
| 4 | 35 |
| 5 | 17 |
| 6+ | 14 |
Base R替代方法
如果不想加载dplyr,用基础R也能实现:
# 创建分组标签 df$days_group <- ifelse(df$days > 5, "6+", as.character(df$days)) # 按分组汇总n df_processed <- aggregate(n ~ days_group, data = df, sum) # 重命名列并调整顺序 colnames(df_processed) <- c("days", "n") df_processed <- df_processed[match(df_processed$days, c("0","1","2","3","4","5","6+")), ]
绘图注意事项
因为你已经有了汇总后的n值,用geom_col()比geom_bar()更合适(geom_bar默认是自动计数,而geom_col直接使用现有数值):
library(ggplot2) ggplot(df_processed, aes(x = days, y = n)) + geom_col(fill = "steelblue") + labs(x = "天数", y = "数量")
内容的提问来源于stack exchange,提问作者user27294105
相关产品推荐
相关产品推荐

