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

如何按月份和用户类型分组,获取Top10站点用户数并降序排序

解决方案

你可以通过dplyr的分组和切片函数直接实现需求,无需拆分数据集。核心是在month_of_day和member_casual的组合分组内,对站点用户数排序并提取Top10,同时确保月份按1-12月顺序展示。

完整代码示例

library(dplyr)

# 1. 确保月份为有序因子(保证1-12月的展示顺序)
annual_2022_v2 <- annual_2022_v2 %>%
  mutate(month_of_day = factor(month_of_day, 
                               levels = 1:12, 
                               labels = c("1月", "2月", "3月", "4月", "5月", "6月",
                                          "7月", "8月", "9月", "10月", "11月", "12月"),
                               ordered = TRUE))

# 2. 分组统计+提取各组合下的Top10站点
top10_stations <- annual_2022_v2 %>%
  # 按月份、用户类型、站点分组,统计用户数
  group_by(month_of_day, member_casual, start_station_name) %>%
  summarize(users = n(), .groups = "drop_last") %>%  # drop_last保留前两级分组(月份+用户类型)
  # 在每个月份+用户类型的组内,取用户数最多的前10个站点
  slice_max(users, n = 10, with_ties = FALSE) %>%  # with_ties=FALSE避免并列时超出10个
  # 可选:添加组内排名列
  mutate(rank = row_number(desc(users))) %>%
  # 按月份、用户类型、排名排序输出
  arrange(month_of_day, member_casual, rank)

关键步骤说明

  • 处理月份顺序:将month_of_day转为有序因子,避免默认的字符/数字排序混乱,确保输出按1月到12月依次展示。
  • 分组统计:先按month_of_day、member_casual、start_station_name三级分组统计用户数,.groups = "drop_last"保留前两级分组,方便后续在组内取Top10。
  • 提取Top10:slice_max(users, n=10)会在每个month_of_day + member_casual的组内,筛选用户数最高的10个站点;with_ties=FALSE可以避免因并列数值导致结果超过10条(如果需要保留并列,可设为TRUE)。
  • 添加排名:mutate(rank = row_number(desc(users)))会在每个组内生成1-10的排名,便于查看站点的位次。

输出效果

最终的top10_stations数据框会按1月到12月的顺序,分别展示Casual和Member两类用户下,各月份用户数排名前10的站点、用户数及组内排名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:50:10