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

ggplot与summarise未按day和group分组生成统计量问题

问题解决:分组汇总异常及柱状图绘制修正

错误原因

你的代码中summarise函数的写法有误:na.rm = TRUE被当成了新列的定义,而非mean()函数的参数。这会导致生成冗余列,且若数据中存在未被过滤的NA时,均值计算会出错,最终可能导致分组汇总结果异常。

修正后的完整代码

study_id <- c(1,2,3,4,5,6)
group <- c(1,2,1,2,1,2)
mass_day1 <-c(NA,2,NA,3,NA,1)
mass_day2 <- c(15,15,15,15,NA,15)
mass_day3 <-c(3,3,3,3,3,3)
mass_day4 <- c(4,4,4,NA,4,4)

drink_df  <- data.frame(study_id,group,mass_day4,mass_day3,mass_day2,mass_day1) 

# 数据转换与分组汇总(修正核心部分)
drink_dfa <- drink_df %>%   
  pivot_longer(cols = starts_with("mass"),       
               names_to = c(".value", "day"),    
               names_pattern = '(.*)_(.*)',
               values_drop_na = TRUE) %>% 
  dplyr::group_by(day,group) %>% 
  summarise(mass = mean(mass, na.rm = TRUE)) %>%  # 将na.rm放入mean函数内
  ungroup() %>%
  mutate(day = factor(day, levels = paste0("day", 1:4)))  # 按day1-day4排序x轴

# 绘制柱状图
plot <- ggplot(drink_dfa, aes(x = day, y = mass, fill = factor(group))) +
  geom_bar(stat="identity", position=position_dodge(width=0.8), na.rm = FALSE) +
  labs(x = "天数", y = "平均质量", fill = "分组") +
  theme_minimal()

print(plot)

关键修正点说明

  • 汇总逻辑修正:将na.rm = TRUE移入mean()函数参数中,确保均值计算时正确忽略NA(即使pivot_longer已过滤NA,这也是更健壮的写法)。
  • x轴顺序调整:通过mutate将day转换为有序因子,避免原始数据中day4-day1的倒序显示,符合常规阅读习惯。
  • 分组可视化优化:将group转换为因子,让填充色图例更清晰,同时调整position_dodge的宽度,让分组柱子间距更合理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:58:09