group_by() 関数と top_n() 関数を組み合わせることで、グループごとの上位を求めることができます。
例えば、下記のように同じ Symbol を持つグループのデータがあったとします。
> result_data
# A tibble: 9 x 5
Id Symbol Sample1 Sample2 Ratio
<chr> <chr> <dbl> <dbl> <dbl>
1 id1 AAA 1 4 4
2 id2 AAA 2 5 2.5
3 id3 AAA 3 6 2
4 id4 BBB 4 1 0.25
5 id5 BBB 5 2 0.4
6 id6 BBB 6 3 0.5
7 id7 CCC 3 4 1.33
8 id8 CCC 2 5 2.5
9 id9 DDD 1 6 6
この時、各シンボルごとに1番 Ratio の高いデータだけを選ぶには、 group_by(Symbol)
として、グループ化したのち、 top_n(1, Ratio)
を適応すれば良いです。
実行結果は、下記のようになります。
> result_data %>% group_by(Symbol) %>% top_n(1, Ratio)
# A tibble: 4 x 5
# Groups: Symbol [4]
Id Symbol Sample1 Sample2 Ratio
<chr> <chr> <dbl> <dbl> <dbl>
1 id1 AAA 1 4 4
2 id6 BBB 6 3 0.5
3 id8 CCC 2 5 2.5
4 id9 DDD 1 6 6