2014-03-13 33 views
1

跳過地方可變排名我有一個看起來像這樣的載體:不中的R

> 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中已有函數嗎?我知道我可以將這些數值轉換爲因素,然後對這些因素進行排序,但這似乎有點迂迴。 (如果沒有的功能,是有這種排名的名字嗎?)

(FUN:我以前沒有注意到這一點,但它看起來像秩冪等,這是有點酷:

> 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

嗯,我想這被稱爲「密集排名」https://en.wikipedia.org/wiki/Ranking#Dense_ranking_.28.221223.22_ranking.29 – Mittenchops

回答

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)))