R Academy · レッスン

rank()による値の順位付け

average、first、min、max、randomによる同順位の処理方法を使って順位を付けます。

レッスン 3/413 ステップ

「rank()による値の順位付け」はCoddyKit上の無料R Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはR Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 R Academyコースには全4レッスンが含まれています。

rank() が返すもの

rank(x)は、ベクトル内の値の標本順位を返します。最小の値が順位1、2番目に小さい値が順位2となり、以下同様に続きます。order()とは異なり、出力の長さは入力と同じで、各位置にその順位が格納されます。

scores <- c(78, 92, 65, 88, 71)
ranks <- rank(scores)
print(scores)
print(ranks)

同順位の処理:Average メソッド

値が等しい場合、rank()はties.method引数に従って順位の付け方を決めます。デフォルトは'average'で、同順位の要素には、それらが占めるはずだった順位の平均が割り当てられます。

x <- c(10, 20, 20, 30)
# Default: average of positions 2 and 3 = 2.5
rank(x)
rank(x, ties.method = 'average')

同順位の方法:first と last

ties.method = 'first'では、同順位の要素のうちベクトル内で先に現れる要素に低い順位を割り当てます。'last'は逆で、先に現れる要素に高い順位を割り当てます。

x <- c(10, 20, 20, 30)
cat('first:', rank(x, ties.method = 'first'), '\n')
cat('last: ', rank(x, ties.method = 'last'),  '\n')

同順位の方法:min と max

'min'では、同順位のすべての要素に、取り得る最小の順位を割り当てます(スポーツで使われる方法です。2人の選手が3位で同順位なら、どちらも順位3となり、順位4はありません)。'max'では、同順位のすべての要素に最大の順位を割り当てます。

x <- c(10, 20, 20, 30)
cat('min:', rank(x, ties.method = 'min'), '\n')
cat('max:', rank(x, ties.method = 'max'), '\n')

同順位の方法:random

ties.method = 'random'では、同順位の要素に異なる順位をランダムに割り当てて同順位を解消します。呼び出すたびに結果が変わる可能性があります。同順位の順序を気にせず、一意な integer 順位が必要な場合に便利です。

x <- c(10, 20, 20, 20, 30)
set.seed(42)
cat('random run 1:', rank(x, ties.method = 'random'), '\n')
set.seed(99)
cat('random run 2:', rank(x, ties.method = 'random'), '\n')

密順位と標準順位

Rのrank()は、競技順位方式(1、2、2、4)を生成します。順位の間に欠番がない密順位(1、2、2、3)にするには、一意な値に対してrank(x, ties.method = 'min')を使用するか、data.tableまたはdplyrパッケージを使用します。次のように base R だけでも回避策を実装できます:

x <- c(10, 20, 20, 30)
# Standard ranking (gaps after ties)
cat('Standard:', rank(x, ties.method = 'min'), '\n')
# Dense ranking: rank of sorted unique values
dense <- match(x, sort(unique(x)))
cat('Dense:   ', dense, '\n')

rank() と order() と sort()

これら3つの関数は関連していますが、返すものが異なります。sort(x)はソートされた値を返し、order(x)はベクトルをソートする位置を返し、rank(x)は各位置の順位を返します。以下で並べて比較します。

x <- c(30, 10, 50, 20, 40)
cat('x       :', x,        '\n')
cat('sort(x) :', sort(x),  '\n')
cat('order(x):', order(x), '\n')
cat('rank(x) :', rank(x),  '\n')

降順で順位付けする

最大値から最小値の順に順位付けするには(順位1 = 最大値)、rank()に渡す前にベクトルの符号を反転します。これは、順位1を最上位とするランキング表で使うパターンです。

scores <- c(78, 92, 65, 88, 71)
desc_ranks <- rank(-scores)
cat('Scores:      ', scores,     '\n')
cat('Rank (best=1):', desc_ranks, '\n')

データフレームに順位を追加する

よくある作業の一つに、データフレームへの順位列の追加があります。ties.method = 'min'を指定したrank()を使い、降順にする場合は符号を反転して、適切なランキング表を作成します。

df <- data.frame(
  player = c('Alice', 'Bob', 'Carol', 'Dave'),
  score  = c(250, 400, 250, 375)
)
df$rank <- rank(-df$score, ties.method = 'min')
df[order(df$rank), ]

NA値を含むrank()

rank()には、sort()やorder()と同様にna.last引数があります。デフォルトは'keep'で、NA値にはNAの順位を割り当て、NAでない要素同士で順位付けします。

x <- c(5, NA, 2, NA, 8, 1)
cat('na.last=keep:  ', rank(x, na.last = 'keep'), '\n')
cat('na.last=TRUE:  ', rank(x, na.last = TRUE),   '\n')
cat('na.last=FALSE: ', rank(x, na.last = FALSE),  '\n')

パーセンタイル順位

順位を全体の件数で割ると、パーセンタイルに変換できます。パーセンタイル順位は、指定した要素以下の値が全体の何割を占めるかを示します。統計や教育分野のスコアリングで便利です。

scores <- c(60, 75, 82, 91, 68, 77, 85, 95)
n <- length(scores)
pct_rank <- rank(scores) / n * 100
result <- data.frame(score = scores, percentile = round(pct_rank, 1))
result[order(result$score), ]

確認問題

同順位のすべての要素に、可能な順位のうち最も低い順位を同じように割り当てるties.methodはどれですか(スポーツで2人の選手が3位を共有し、4位が存在しない場合のような方式です)。

rank()の要点

rank()の要点:

  • rank(x)は各要素の順位を返します(入力と同じ長さです)
  • デフォルトのties.method = 'average'では、同順位の要素に順位の平均値を割り当てます
  • 'min'はスポーツ式(共有する最下位の順位)、'max'は共有する最上位の順位です
  • 'first'と'last'は、出現順によって同順位を解消します
  • 降順の順位(順位1 = 最大値)にはrank(-x)を使います
  • df$rank <- rank(-df$score, ties.method='min')でデータフレームに順位列を追加できます
x <- c(10, 30, 20, 30, 10)
cat('average:', rank(x, ties.method = 'average'), '\n')
cat('min:    ', rank(x, ties.method = 'min'),     '\n')
cat('max:    ', rank(x, ties.method = 'max'),     '\n')
cat('first:  ', rank(x, ties.method = 'first'),   '\n')
無料で開始

AI チューターと学ぶ R — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
43
レッスン
159

よくある質問

「rank()による値の順位付け」レッスンは無料ですか?

はい。「rank()による値の順位付け」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、R Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 R Academyコースには全4レッスンが含まれています。

「rank()による値の順位付け」で何を学びますか?

average、first、min、max、randomによる同順位の処理方法を使って順位を付けます。 ブラウザで直接実行するハンズオンコードでR Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

R Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのR Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「rank()による値の順位付け」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このR Academyレッスンでコードを書いて実行できますか?

はい。すべてのR Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. sort()によるベクトルの並べ替え
  2. 柔軟な並べ替えのためのorder()
  3. rank()による値の順位付け
  4. 列によるデータフレームの並べ替え
← R Academyに戻る