1

我想对数据框的一列进行排名,但我希望根据其顺序而不是升序或降序对其进行排名。如下所示:

> test <- c(0,0,0,2,1,5,3)

然后像这样排名:

[1] 1 1 1 2 3 4 5

最简单的方法是什么?先感谢您。

4

2 回答 2

8

使用rle

test = c(0,0,0,2,1,5,3)
rle_test = rle(test)
ordered = rep(1:length(rle_test$lengths), rle_test$lengths)

输出:

> ordered
[1] 1 1 1 2 3 4 5
于 2013-07-22T12:46:59.093 回答
0

另一种方法是在 data.table 包中使用 frankv() 的 ties="dense" 选项:

X

[1] 12 9 5 7 15 7 7 8 7 13 6 12 7 12 5 2 8 28 20 9 10 3 12 6 1

frankv(x,ties="密集")

[1] 10 8 4 6 12 6 6 7 6 11 5 10 6 10 4 2 7 14 13 8 9 3 10 5 1

于 2017-10-06T21:28:24.523 回答