見出し画像

上位のデータを抽出: top_n()

top_n() 関数を使うと、テーブルに含まれる任意の値を指定して、その値が高いデータの上位n個を抽出できます。例えば、「2つのデータを比較して、 ratio の高いものから10個取り出す」というようなことが簡単に書けます。

サンプルデータの生成

説明の前に、例題に使用するためにランダムなデータを生成します。

input_data <- tibble("Sample1" = rnorm(100) + 10,                                                                                                                                                         [25/517]
                     "Sample2" = rnorm(100) + 10)

input_data として、Sample1 と Sample2 について、100個ずつデータを持つテーブルが作成されます。

> input_data
# A tibble: 100 × 2
   Sample1 Sample2
     <dbl>   <dbl>
 1    9.68    9.07
 2   10.1     9.50
 3    9.59   10.8
 4   12.0    10.1
 5   12.2     8.70
 6   10.8     9.77
 7    9.90    8.08
 8   11.1    11.7
 9   13.1    10.9
10   11.6     9.09
# … with 90 more rows
# ℹ Use `print(n = ...)` to see more rows

次に、Sample2 は Sample1 の何倍になっているか、ratio を算出します。ratio の列は、 mutate("ratio" = Sample2 / Sample1) のように書けます。

input_data %>%
  mutate("ratio" = Sample2 / Sample1)

# A tibble: 100 × 3
   Sample1 Sample2 ratio
     <dbl>   <dbl> <dbl>
 1    9.68    9.07 0.936
 2   10.1     9.50 0.936
 3    9.59   10.8  1.12
 4   12.0    10.1  0.844
 5   12.2     8.70 0.711
 6   10.8     9.77 0.907
 7    9.90    8.08 0.816
 8   11.1    11.7  1.05
 9   13.1    10.9  0.830
10   11.6     9.09 0.781
# … with 90 more rows
# ℹ Use `print(n = ...)` to see more rows

top_n() で、ratio の上位10個を抽出

top_n() の最初の引数に取り出す個数を、2つ目の引数にどの値を使うか指定します。ratio の上位10個を取り出す場合は、 top_n(10, ratio) となります。

input_data %>%
  mutate("ratio" = Sample2 / Sample1) %>%
  top_n(10, ratio)

# A tibble: 10 × 3
   Sample1 Sample2 ratio
     <dbl>   <dbl> <dbl>
 1    9.20   11.2   1.21
 2    7.16    8.96  1.25
 3    9.25   11.0   1.19
 4    8.04    9.99  1.24
 5    9.49   11.7   1.24
 6    8.94   11.9   1.33
 7    9.50   11.7   1.23
 8    8.58   11.3   1.32
 9    9.11   11.1   1.22
10    8.24   10.5   1.27

これで ratio の上位10個が取り出されていますが、ratio でソートしておいたほうが分かりやすいかもしれません。 arrange(desc(ratio))  で、 ratio の降順にソートできます。

input_data %>%
  mutate("ratio" = Sample2 / Sample1) %>%
  top_n(10, ratio) %>%
  arrange(desc(ratio))

# A tibble: 10 × 3
   Sample1 Sample2 ratio
     <dbl>   <dbl> <dbl>
 1    8.94   11.9   1.33
 2    8.58   11.3   1.32
 3    8.24   10.5   1.27
 4    7.16    8.96  1.25
 5    8.04    9.99  1.24
 6    9.49   11.7   1.24
 7    9.50   11.7   1.23
 8    9.11   11.1   1.22
 9    9.20   11.2   1.21
10    9.25   11.0   1.19

top_n() で下位を抽出

同じ top_n() で、下位を抽出することもできます。その場合は、最初の引数に、マイナスをつけて指定します。top_n(-10, ratio) で、ratio の低いものから10個を取得できます。

input_data %>%
  mutate("ratio" = Sample2 / Sample1) %>%
  top_n(-10, ratio) %>%
  arrange(ratio)

# A tibble: 10 × 3
   Sample1 Sample2 ratio
     <dbl>   <dbl> <dbl>
 1   12.2     8.70 0.711
 2   10.8     7.92 0.735
 3   10.2     7.62 0.750
 4   11.0     8.23 0.750
 5   11.0     8.39 0.761
 6   12.1     9.23 0.766
 7   11.6     9.09 0.781
 8    9.58    7.63 0.797
 9   11.3     9.07 0.806
10    9.90    8.08 0.816


この記事が気に入ったらサポートをしてみませんか?