4

我有一个看起来像这样的向量:

> vec
[1]  1  1  2  5 10

我正在尝试将其转换为一种非奥林匹克排名形式,其中平局仍然是平局,但即使在其上方有多个平局时,排名也保证相隔 1,因此:

> f(vec)
[1]  1  1  2  3  4

而不是:

> rank(vec,ties.method="min")
[1] 1 1 3 4 5

R 中是否已经有这样做的功能?我知道我可以将这些值转换为因子然后对因子进行排名,但这似乎有点迂回。(如果不是函数,这种排名有名称吗?)

(有趣:我以前没有注意到这一点,但看起来 rank 是幂等的,这有点酷:

> rank(vec,ties.method="min")
[1] 1 1 3 4 5
> rank(rank(vec,ties.method="min"),ties.method="min")
[1] 1 1 3 4 5

)

4

1 回答 1

8

尝试这个:

vec <- c(1,1,2,5,10)
> as.integer(factor(vec))
[1] 1 1 2 3 4

我现在意识到你提到了因素路线。就个人而言,我并不觉得它非常冒犯。

或者您可以访问factor自己的代码并做一些几乎等效的事情:

match(vec,unique(vec))

但这假设vec是排序的,所以也许你真的必须做类似的事情

match(vec,sort(unique(vec)))
于 2014-03-13T01:13:26.437 回答