21

単一の基準が適切に順序付けられている場合、ランク関数は明白なものを返します。

rank(c(2,4,1,3,5))
[1] 2 4 1 3 5

単一の基準に同点がある場合、ランク関数(デフォルト)は平均ランクを同点に割り当てます。

rank(c(2,4,1,1,5))
[1] 3.0 4.0 1.5 1.5 5.0

ランク関数では複数の基準で並べ替えることができないため、別のものを使用する必要があります。これを行う1つの方法は、一致と順序を使用することです。同点のない単一の基準の場合、結果は同じです。

rank(c(2,4,1,3,5))
[1] 2 4 1 3 5

match(1:5, order(c(2,4,1,3,5)))
[1] 2 4 1 3 5

ただし、同点の単一の基準の場合、結果は異なります。

rank(c(2,4,1,4,5))
[1] 2.0 3.5 1.0 3.5 5.0

match(1:5, order(c(2,4,1,4,5)))
[1] 2 3 1 4 5

同点の要素には、同じランクが割り当てられるのではなく、元の順序が保持されるように、同点が解除されます。この機能は、明らかに、複数の基準でソートする場合に一般化されます。

match(1:5, order(c(2,4,1,4,5),c(10,11,12,11,13)))
[1] 2 3 1 4 5

最後に、質問:関係を維持する複数の基準を使用してランクを計算する単純な、または組み込みの方法はありますか?私はそれを行うための関数を書きましたが、それは醜く、そのような基本的な機能のために途方もなく複雑に見えます...

4

1 に答える 1

23

interactionあなたが必要なことをします:

> rank(interaction(c(2,4,1,4,5),c(10,11,12,11,13), lex.order=TRUE))
[1] 2.0 3.5 1.0 3.5 5.0

これが起こっていることです。

interaction因子を期待するので、ベクトルは強制されます。そうすることで、で示される因子レベルの次数が生成されます。sort.listこれnumericは、数値的に減少しない次数です。
次に、2つの因子を組み合わせるために、交互作用は2番目の引数を最も速く変化させることによって因子レベルを作成します(なぜならlex.order=TRUE)。したがって、最初のベクトルの同点は、2番目のベクトルの値によって解決されます(可能な場合)。
最後にrank、結果の係数をに強制しnumericます。

実際にランク付けされるもの:

> as.numeric(interaction(c(2,4,1,4,5),c(10,11,12,11,13), lex.order=TRUE))
[1]  5 10  3 10 16

drop=TRUEにオプションを指定すると、メモリを節約できますinteraction。これにより、ランク付けされた数値は変更されますが、順序は変更されないため、最終的な結果は同じになります。

于 2012-12-31T16:50:02.990 に答える