如何在R语言中对含重复值的向量生成不跳级的排名?
实现无跳过、重复值同排名的向量排名
方法1:使用dplyr的dense_rank()(推荐)
dense_rank()专门用于生成不跳过位次的稠密排名,完美匹配需求:重复值赋予相同排名,返回向量长度与原向量一致,且不会跳过排名。
代码示例:
library(dplyr) x <- c(1, 5, 10, 10, 50) dense_rank(x)
执行结果:
[1] 1 2 3 3 4
方法2:基础R实现(无需额外包)
如果不想依赖第三方包,可以结合match()和sort(unique())实现相同效果——利用排序后的唯一值构建映射,将原向量元素对应到其在唯一值序列中的位置:
代码示例:
x <- c(1, 5, 10, 10, 50) match(x, sort(unique(x)))
执行结果同样为:
[1] 1 2 3 3 4
说明
- 你之前尝试的
rank(ties.method = "min")会保留重复值的最小原始位次,但后续排名会跳过被重复值占用的位次,因此得到[1] 1 2 3 3 5; ties.method = "first"则按元素出现顺序给重复值分配不同排名,不符合重复值同排名的要求。
内容的提问来源于stack exchange,提问作者dcoy
相关产品推荐
相关产品推荐

