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

R语言dplyr中group_by后用arrange分组失效如何解决

问题原因

dplyr 中 arrange() 默认参数为 .by_group = FALSE,该模式下排序会直接忽略数据集的分组标记,对全表做全局排序,不会自动把分组变量纳入排序优先级,所以你写的代码只会全局按year、quarter升序排列,不会实现按Route_ID拆分后组内排序的效果。
另外group_by()本身不会修改数据的行顺序,仅会给数据集附加分组属性,所以不管你把group_by()放在arrange()之前还是之后,都不会改变arrange()默认全局排序的行为。

解决方法

两种写法都能实现需求,按需选择即可:

  • 写法1:保留分组结构,开启按组排序参数
    在arrange()中设置.by_group = TRUE,函数会自动优先按分组变量排序,再按你指定的字段完成组内排序。排序后数据集的分组标记会保留,后续做组内统计、变换等操作不需要重新分组:
    df %>%
      group_by(Route_ID) %>% 
      arrange(year, quarter, .by_group = TRUE)
    
  • 写法2:显式指定分组变量为第一排序优先级
    如果你不需要保留排序后的分组属性,或者不想额外记参数,可以直接把Route_ID放在arrange()排序字段的最前面,排序效果和上面完全一致:
    df %>%
      arrange(Route_ID, year, quarter)
    
    如果后续需要继续做组内操作,在这句前后加上group_by(Route_ID)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 11:24:37