2016-08-16 6 views
3

このpostでは、order(order(x))rank(X)と同じであると記載されています。なぜorder(order(x))はRのランク(x)と同じですか?

いくつかの実験がこれを裏付けている間...

#why is order(order(x)) == rank(x)? 
x <- c(0.2, 0.5, 0.1) 
x 
## [1] 0.2 0.5 0.1 
order(x) 
## [1] 3 1 2 
rank(x) 
## [1] 2 3 1 
order(order(x)) 
## [1] 2 3 1 

...私は、これは直感、さらに良く、証明することができ方法を確認することはできません。

は(NB:related questionが、同じではない!)

+2

'ties.method ="最初に "' 'rank'は実際には' sort.list(sort.list(x)) 'を使用します。 – Roland

+0

@RomanCheplyaka:これはあなたの質問かもしれませんか? – vonjd

答えて

1

まずオフ1:10の順列から形成された整数配列と何が起こるかを見て:

> set.seed(123); x <- sample(10) 
> x 
[1] 3 8 4 7 6 1 10 9 2 5 
> order(x) 
[1] 6 9 1 3 10 5 4 2 8 7 
> order(order(x)) 
[1] 3 8 4 7 6 1 10 9 2 5 
> rank(x) 
[1] 3 8 4 7 6 1 10 9 2 5 

order -operationがありますこの場合、それ自身の逆数。 order - 操作は常に1から始まるシーケンスを返すので、orderのネストされた奇数のアプリケーションは同じベクトルを与えます。

Orderは、元のベクトルをソートするために使用できるインデックスベクトルを返します。したがって、最小の項目の位置が最初の位置にあり、2番目の最小値の位置は、次に、....となり、最後の項目は最大の項目の位置になります。だから、もう一度インデックスベクトル上でその操作を実行すると、最初の項目は最小のインデックスのインデックスになります(以下同様)...そしてベクトルのランクです。

0

私は直感は、これらの線に沿って何かだと思う:ランクがちょうど「その上に位置希望の項目、第一、第二、... 1は、最初にすべての項目を並べ替えた場合、最後の位置があること」のショートカットです。

ベクトルのの位置のの位置について話しているので、order関数をネストする必要があります。

上記の例のように、最初の位置にあるorderファンクションから開始して、これは最小インデックスが(= 2)のどこにあるかを示します。ここで最小インデックスは、あなたがそれを注文した場合の数字の位置にあります(これはorderの機能です)。上の例では、最初の数字(= 0.2)が2番目に大きいのでポジション番号2。

これは、最初にベクターを注文した場合、最初の数字が2番目の数字であると言っているだけのファンシーな方法です。これはrankの機能には何もありません。

関連する問題