R语言:如何在管道中按多列分组聚合计数并结合arrange与head?
问题描述
需要按start_station_id和end_station_id两列分组统计行数,对统计结果升序排序后取前几行用于绘图。尝试结合管道(%>%)和arrange时出错,当前代码如下:
df_Cleaned %>% head(arrange(aggregate(df_Cleaned$Distance, by = list(df_Cleaned$start_station_id, df_Cleaned$end_station_id), FUN = nrow)))) %>% ggplot(mapping = aes(x = ride_id, color = member_casual)) + geom_bar()
问题核心是混用了base R的aggregate和dplyr管道语法,且强行添加df_Cleaned$前缀破坏了管道的数据传递逻辑。
解决方案
统一使用dplyr系列函数完成分组统计、排序和取数,管道会自动传递前一步的数据,无需手动添加数据框前缀:
df_Cleaned %>% # 按指定列分组 group_by(start_station_id, end_station_id) %>% # 统计每组行数,命名为count summarise(count = n(), .groups = "drop") %>% # 按统计行数升序排列 arrange(count) %>% # 取前10行(可根据需求修改数字) head(10) %>% # 绘图,注意x轴需对应分组后的列,这里示例用分组组合或count ggplot(aes(x = interaction(start_station_id, end_station_id), y = count, fill = member_casual)) + geom_col()
关键修正点:
- 用
group_by()替代aggregate,配合管道自动传递数据,无需df_Cleaned$前缀 - 用
summarise(n())统计行数,比nrow更适配分组场景 arrange()直接作用于分组统计后的结果,逻辑更清晰- 绘图部分修正了参数:分组后原
ride_id列已被聚合,需使用分组列或统计的count列;geom_bar()适合原始数据计数,聚合后用geom_col()更合适
内容的提问来源于stack exchange,提问作者Xanadu
相关产品推荐
相关产品推荐

