如何在R中进行排名时保留连续的(1、2、3、...n)排名符号?

3

如果我想使用最小排名来对一组数字进行排序(也称为并列的情况):

dat <- c(13,13,14,15,15,15,15,15,15,16,17,22,45,46,112)
rank(dat, ties = 'min')

我得到了结果:
 1  1  3  4  4  4  4  4  4 10 11 12 13 14 15

然而,我希望排名是一个连续的系列,由1、2、3…n组成,其中n是唯一排名的数量。

有没有办法让rank(或类似的函数)通过将并列分配给最低排名来排列一系列数字,如上所述,但不是跳过先前与并列数相同的排名值,而是从前一个排名继续排名

例如,我希望上述排名的结果为:

1  1  2  3  3  3  3  3  3  4  5  6  7  8  9
2个回答

5

你可以使用dplyr来完成:

library(dplyr)
dense_rank(dat)

 [1] 1 1 2 3 3 3 3 3 3 4 5 6 7 8 9

如果您不想加载整个库并且想在base r中完成操作:

match(dat, sort(unique(dat)))

 [1] 1 1 2 3 3 3 3 3 3 4 5 6 7 8 9

太好了。我正准备用那段代码更新你的答案,以便于像我这样喜欢使用基本R的人们。这正是我在寻找的!谢谢@jalapic。 - theforestecologist
在我看来,你最好提供两个解决方案作为两个单独的答案,以帮助投票。 - JelenaČuklina

5

使用factor函数将数据转化为因子格式,然后再将其转化为numeric格式:

as.numeric(factor(rank(dat)))
# [1] 1 1 2 3 3 3 3 3 3 4 5 6 7 8 9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接