56

rankR 関数とR 関数の違いがよくわかりませんorder。それらは同じ出力を生成するようです:

> rank(c(10,30,20,50,40))
[1] 1 3 2 5 4
> order(c(10,30,20,50,40))
[1] 1 3 2 5 4

誰かが私のためにこれに光を当てることができますか? ありがとう

4

7 に答える 7

72
set.seed(1)
x <- sample(1:50, 30)    
x
# [1] 14 19 28 43 10 41 42 29 27  3  9  7 44 15 48 18 25 33 13 34 47 39 49  4 30 46  1 40 20  8
rank(x)
# [1]  9 12 16 25  7 23 24 17 15  2  6  4 26 10 29 11 14 19  8 20 28 21 30  3 18 27  1 22 13  5
order(x)
# [1] 27 10 24 12 30 11  5 19  1 14 16  2 29 17  9  3  8 25 18 20 22 28  6  7  4 13 26 21 15 23

rank各値の「ランク」を持つベクトルを返します。最初の位置の数字は 9 番目に低い数字です。order初期ベクトルxを順番に並べるインデックスを返します。

の 27 番目の値がx最も低く、 -27の最初の要素でorder(x)あり、 を見るとrank(x)、27 番目の要素は1です。

x[order(x)]
# [1]  1  3  4  7  8  9 10 13 14 15 18 19 20 25 27 28 29 30 33 34 39 40 41 42 43 44 46 47 48 49
于 2012-09-05T20:35:05.317 に答える
11

結局のところ、これは特殊なケースであり、混乱を招きました。興味のある人のために以下に説明します。

rank昇順リストの各要素の順序を返します

order各要素が昇順リストに持つインデックスを返します

于 2012-09-05T20:36:25.327 に答える
9

この 2 つの違いを考えるといつも混乱してしまいorderますrank

ジャスティンの例から始めます:

ランクを使用して注文する:

## Setup example to match Justin's example
set.seed(1)
x <- sample(1:50, 30) 

## Make a vector to store the sorted x values
xx = integer(length(x))

## i is the index, ir is the ith "rank" value
i = 0
for(ir in rank(x)){
    i = i + 1
    xx[ir] = x[i]
}

all(xx==x[order(x)])
[1] TRUE
于 2012-09-07T01:10:08.733 に答える