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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:11:28