R语言中是否有优雅的方法可按行名对dataframe进行排序?
解决方案
方法1:基础R原生实现(无额外包依赖)
你之前用order()的写法之所以返回数值向量、丢失行名,是因为单列data.frame索引时默认触发了降维转换,加上drop = FALSE参数禁止降维即可直接保留data.frame结构和行名:
df <- df[order(rownames(df)), , drop = FALSE]
运行后直接得到按行名排序的data.frame,无需额外赋值操作。
方法2:tidyverse风格实现(语法清晰易读)
arrange()无法直接识别行名,你可以借助tibble包的行名转换函数,完成排序后再还原行名即可:
# 需提前加载依赖包 library(dplyr) library(tibble) df <- df %>% rownames_to_column("row_id") %>% # 把行名转为普通列 arrange(row_id) %>% # 按转换后的列排序 column_to_rownames("row_id") # 把临时列还原为行名
两种方法都可以直接得到符合要求的结果,不需要手动新建dataframe赋值。
内容的提问来源于stack exchange,提问作者Xiaokang
相关产品推荐
相关产品推荐

