如何使用.groups参数解决summarise未按weekday分组的问题
修复summarise分组异常与可视化问题
核心问题分析
你收到的提示是dplyr的默认行为:summarise()会自动将分组层级向上缩减一级(你按member_casual和weekday双分组,默认summarise后仅保留member_casual分组),但看不到预期分组结果的根本原因是:started_at是字符型,wday()无法正确解析生成合法的星期分组,导致后续分组逻辑失效。
解决方案
1. 修正日期时间类型
使用lubridate包的mdy_hm()函数将started_at转换为日期时间格式(你的日期格式是月/日/年 时:分)。
2. 用.groups参数控制分组保留
在summarise()中设置.groups参数,常用可选值:
.groups="keep":保留所有原始分组(member_casual+weekday).groups="drop":完全取消分组(适合后续ggplot可视化,避免分组影响绘图)
修正后的完整代码
library(dplyr) library(lubridate) library(ggplot2) all_trips_v2 %>% # 转换started_at为日期时间类型 mutate(started_at = mdy_hm(started_at)) %>% # 生成正确的星期标签 mutate(weekday = wday(started_at, label = TRUE)) %>% # 按双变量分组 group_by(member_casual, weekday) %>% # summarise时设置.groups参数,这里用drop取消分组方便绘图 summarise(number_of_rides = n(), average_duration = mean(ride_length), .groups = "drop") %>% arrange(member_casual, weekday) %>% ggplot(aes(x = weekday, y = number_of_rides, fill = member_casual)) + geom_col(position = "dodge")
补充说明
如果后续还要基于分组做操作,可将.groups="drop"改为.groups="keep",ggplot处理分组数据也能正常工作,只是取消分组更稳妥。
内容的提问来源于stack exchange,提问作者Moza
相关产品推荐
相关产品推荐

