如何按数值而非字符顺序对R数据框行索引进行排序
问题原因
你的行名当前为字符类型,直接排序默认按字符字典序处理,才会出现1,10,11排在2前面的问题,之前调用order()未生效大概率是没有先将行名转为数值类型再排序。
解决方法
基础R实现
直接对行名做数值转换后排序再提取行即可,代码如下:
# 你的示例数据 df <- structure(list(`colSums(fake_with_noise_boundary)` = c(-3405, 2304, -4096, 474, -2089, -3921, -2590, 1605, 1317, 2804, 2934)), row.names = c("1", "10", "11", "12", "2", "20", "21", "3", "30", "31" , "40"), class = "data.frame") # 按行名的数值顺序排序 df_sorted <- df[order(as.numeric(rownames(df))), ]
执行后df_sorted的行名顺序就是1,2,3,10,11,12,20,21,30,31,40的数值顺序。
dplyr实现(适配tidyverse生态使用习惯)
library(dplyr) df_sorted <- df %>% rownames_to_column("row_id") %>% mutate(row_id = as.numeric(row_id)) %>% arrange(row_id) %>% column_to_rownames("row_id")
注意事项
如果行名中存在无法转为数值的字符,as.numeric()会抛出警告,请提前确认所有行名均为可转的数值格式。
内容的提问来源于stack exchange,提问作者SssssssAaaaaaa
相关产品推荐
相关产品推荐

