R语言对含NA列排名 排除NA参与计算同时保留原数据NA值
R语言实现含NA列的排名(保留NA行对应排名为NA)
问题原因
你现有的代码存在两处明显问题:
- 缺少核心排名函数
rank()的调用,语法不完整无法运行 - 参数
ties.method取值拼写错误,应为"min"/"max"等合法值,你写的"mim"属于无效参数
正确实现方法
rank()函数自带na.last参数,设置为NA即可满足需求:计算排名时自动忽略NA值,最终结果中原本为NA的行,对应排名也会返回NA。
同时设置decreasing = TRUE实现数值越大排名越靠前的逻辑,和你示例的排序规则一致。
完整代码
# 构造示例数据 df<-read.table(text="time 40 30 50 NA 60 NA 20 ", header=TRUE) # 计算排名 df$Rank <- rank(df$time, na.last = NA, decreasing = TRUE) # 输出结果 print(df)
运行结果
time Rank 1 40 3 2 30 4 3 50 2 4 NA NA 5 60 1 6 NA NA 7 20 5
补充说明
如果你的数据存在并列值,可以通过调整ties.method参数控制并列排名规则:
ties.method = "min":并列值取最小排名ties.method = "max":并列值取最大排名ties.method = "average":并列值取平均排名ties.method = "first":按出现顺序分配排名,先出现的数值排名更靠前
内容的提问来源于stack exchange,提问作者user3546966
相关产品推荐
相关产品推荐

