ランキング

概要

dplyrパッケージに含まれるrow_number(), min_rank(), dense_lank(), percent_rank(), cume_dist(), ntile()は、値をランキングする関数です。主にmutate()と併せて使用します。

関連ページ

関数

row_number(x)
min_rank(x)
dense_rank(x)
percent_rank(x)
cume_dist(x)
ntile(x = row_number(), n)
引数指定説明
x必須列名(ベクトル)
順序の基準となる列を指定します
row_number()のみ未指定でも機能します
n必須ntile()で使用する
最大値を指定します

使い方

解説用データフレーム

df <- tibble::tibble(
  x1 = c(1, 2, 3, 3, 4),
)
> df
# A tibble: 5 x 1
     x1
  <dbl>
1     1
2     2
3     3
4     3
5     4

1.Base関数

dplyrパッケージのランキング関数はrank()をベースにして作られています。rank()の挙動は以下の通りです。

# Base関数
mutate(df,
       first = rank(x1, ties.method = 'first'),
       min   = rank(x1, ties.method = 'min'),
       max   = rank(x1, ties.method = 'max'))
# A tibble: 5 x 4
     x1 first   min   max
  <dbl> <dbl> <dbl> <dbl>
1     1     1     1     1
2     2     2     2     2
3     3     3     3     4
4     3     4     3     4
5     4     5     5     5

2.行番号の取得

# 行番号の取得
mutate(df, x2 = row_number())
# A tibble: 5 x 2
     x1    x2
  <dbl> <dbl>
1     1     1
2     2     2
3     3     3
4     3     4
5     4     5

3.ランク付け

以下のコードは、指定した列の値を昇順でランク付けする具体例です。降順でランク付けする場合は x1 の代わりに desc(x1) と指定します。

3-1.重複なし

# ランキング関数
mutate(df, x2 = row_number(x1))

# 同じ結果を返すBase関数
mutate(df, x2 = rank(x1, ties.method = 'first'))
# A tibble: 5 x 2
     x1    x2
  <dbl> <dbl>
1     1     1
2     2     2
3     3     3
4     3     4
5     4     5

3-2.重複あり + 飛び番号あり

# ランキング関数
mutate(df, x2 = min_rank(x1))

# 同じ結果を返すBase関数
mutate(df, x2 = rank(x1, ties.method = 'min'))
# A tibble: 5 x 2
     x1    x2
  <dbl> <dbl>
1     1     1
2     2     2
3     3     3
4     3     3
5     4     5

3-3.重複あり + 飛び番号なし

mutate(df, x2 = dense_rank(x1))
# A tibble: 5 x 2
     x1    x2
  <dbl> <dbl>
1     1     1
2     2     2
3     3     3
4     3     3
5     4     4

3-4.正規化

# ランキング関数
mutate(df, x2 = percent_rank(x1))

# 同じ結果を返すBase関数
normalize <- function(x) ((x - min(x)) / (max(x) - min(x)))
mutate(df, x2 = normalize(rank(x1, ties.method = 'min')))
# A tibble: 5 x 2
     x1    x2
  <dbl> <dbl>
1     1  0.00
2     2  0.25
3     3  0.50
4     3  0.50
5     4  1.00

3-5.累積割合

# ランキング関数
mutate(df, x2 = cume_dist(x1))

# 同じ結果を返すBase関数
mutate(df, x2 = rank(x1, ties.method = 'max') / n())
# A tibble: 5 x 2
     x1    x2
  <dbl> <dbl>
1     1   0.2
2     2   0.4
3     3   0.8
4     3   0.8
5     4   1.0

3-6.範囲指定

# 範囲の最大値を10に設定する
mutate(df, x2 = ntile(x1, 10))

# 同じ結果を返すBase関数
mutate(df, x2 = lag(floor(rank(x1, ties.method = 'first') / n() * 10), default = 0) + 1)
# A tibble: 5 x 2
     x1    x2
  <dbl> <dbl>
1     1     1
2     2     3
3     3     5
4     3     7
5     4     9
Sponsored Link