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(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 に答える