1. ホーム
  2. r

[解決済み] order() 関数を理解する

2023-02-14 19:40:47

質問

私は order() 関数がどのように機能するかを理解しようとしています。 私は、それがインデックスの並べ替えを返し、それがソートされたとき、元のベクトルをソートするという印象を持っていました。

例えば

> a <- c(45,50,10,96)
> order(a)
[1] 3 1 2 4

私はこれが返されることを期待していました。 c(2, 3, 1, 4) を返すと期待したのですが、ソートされたリストは 10 45 50 96 となります。

どなたかこの関数の戻り値を理解するのを手伝っていただけませんか?

どのように解決するのですか?

これは が説明しているようです。

<ブロッククオート

の定義は ordera[order(a)] が は増加する順序です。これは、正しい順序が4番目の要素、2番目の要素、1番目の要素、3番目の要素である、あなたの例で動作します。 の順番が正しいのです。

を探していたかもしれませんが rank の順位を返す 要素

R> a <- c(4.1, 3.2, 6.1, 3.1)

R> order(a)

[1] 4 2 1 3

R> rank(a)

[1] 3 2 4 1

だから rank は数字の順番を教えてくれます。 order は昇順で取得する方法を示します。

plot(a, rank(a)/length(a)) はCDFのグラフを出します。 その理由を見るには order がなぜ便利なのかを見るには plot(a, rank(a)/length(a),type="S") を試すと,データが昇順でないため,混乱が生じます。

もしあなたが

oo<-order(a)

plot(a[oo],rank(a[oo])/length(a),type="S")

または単に

oo<-order(a)

plot(a[oo],(1:length(a))/length(a)),type="S")

とすると、CDFの折れ線グラフが得られます。

ランクを意識しているのでしょうね。