R语言中order()函数排序异常问题排查与解决
问题原因
你误用了order()函数——它返回的是原数据中行的索引位置,用来指导如何对原数据排序,而非直接生成连续递增的序号。比如原数据里排序后第一行是原表的第5行,order()返回的对应位置就是5,这就导致你的order列全是原行号的乱序排列,完全不符合需求。
正确实现方法
方法1:用dplyr(和你现有代码风格匹配)
先按指定字段排序,再生成连续序号:
library(dplyr) # 类型转换的代码是对的,保留 mds$vp_initial <- as.numeric(mds$vp_initial) mds$nr_entry <- as.numeric(mds$nr_entry) # 核心步骤:先排序,再生成序号,最后调整列位置 mds <- mds %>% arrange(vp_initial, nr_entry) %>% mutate(order = row_number()) %>% relocate(order, .after = vp_initial)
方法2:用Base R
如果不用tidyverse工具,也可以这么写:
# 先做类型转换 mds$vp_initial <- as.numeric(mds$vp_initial) mds$nr_entry <- as.numeric(mds$nr_entry) # 获取排序索引,先排序数据,再生成连续序号 sort_index <- order(mds$vp_initial, mds$nr_entry) mds <- mds[sort_index, ] mds$order <- 1:nrow(mds) # 如果你不想改变原数据的行顺序,只是要给每行标上它在排序后的位置,可以用rank: # mds$order <- rank(paste(mds$vp_initial, mds$nr_entry), ties.method = "first")
内容的提问来源于stack exchange,提问作者Erefin
相关产品推荐
相关产品推荐

