我有一个看起来像这样的矢量:
> 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(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
)
答案 0 :(得分:5)
试试这个:
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)))