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

R语言中purrr包group_split为何按字母序改行序?如何保留原序?

group_split按行名分组后改变原始顺序的原因及解决办法

问题描述

我将mtcars的行名转为列后:

df <- mtcars %>% rownames_to_column()

使用group_split(rowname)分组时,结果的分组顺序变成了字母排序:

df %>% group_split(rowname)

想知道出现这种情况的原因,以及如何保持原始的行顺序。

原因分析

group_split()默认会对分组变量进行排序后再执行拆分操作。由于rowname是字符型变量,分组时会自动按照字母顺序对分组键排序,最终输出的分组列表就会按这个排序后的顺序排列,而非原始数据的行顺序。

解决办法

  • 方法1:使用.groups参数保留原始分组顺序
    在group_split()中设置.groups = "keep",可以让分组结果直接保留原始数据中的分组顺序:

    df %>% group_split(rowname, .groups = "keep")
    
  • 方法2:将行名转为因子并指定原始顺序
    把rowname转换为因子类型,同时指定因子水平为mtcars原始行名的顺序,这样分组时会遵循因子的水平顺序,而非默认的字母排序:

    # 转换为因子,levels设为原始数据的行名顺序
    df <- df %>% mutate(rowname = factor(rowname, levels = rownames(mtcars)))
    # 执行分组
    df %>% group_split(rowname)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:01:08