如何在R中排序数据框并生成连续行号?
排序后重置R数据框的行号
场景与问题
先通过列联表创建数据框:
Countries <- table(data1$countries) Countriesdf <- data.frame(Countries)
初始数据框内容:
Var1 Freq 1 Azerbaijan 1 2 Bangladesh 200 3 Belarus 19 4 Bolivia 33 5 Brazil 115
尝试用order()按Freq字段排序时,结果保留了原数据框的行号:
Countries_Asc <- order(Countriesdf$Freq) Countries_Ordered <- Countries[Countries_Asc,]
当前输出(行号未重置):
Var1 Freq 2 Bangladesh 200 5 Brazil 115 4 Bolivia 33 3 Belarus 19 1 Azerbaijan 1
需要得到行号连续的排序结果:
Var1 Freq 1 Bangladesh 200 2 Brazil 115 3 Bolivia 33 4 Belarus 19 5 Azerbaijan 1
解决方案
方法1:基础R重置行名
先按需求排序,再手动重置行号:
# 按Freq降序排序(添加负号实现降序,匹配期望结果) Countries_Asc <- order(-Countriesdf$Freq) Countries_Ordered <- Countriesdf[Countries_Asc,] # 重置行名为连续数字 row.names(Countries_Ordered) <- 1:nrow(Countries_Ordered)
方法2:使用dplyr包(tidyverse风格)
如果使用tidyverse工具链,代码更简洁:
library(dplyr) Countries_Ordered <- Countriesdf %>% arrange(desc(Freq)) %>% # 按Freq降序排序 `row.names<-`(1:nrow(.)) # 重置行名
执行任意一种方法后,Countries_Ordered的行号就会变为连续的1到5,符合期望输出。
内容的提问来源于stack exchange,提问作者Muhammad Umair
相关产品推荐
相关产品推荐

