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
相关产品推荐
相关产品推荐

