
上位のデータを抽出: 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