Dplyrを使用してグループごとに最初の行を選択する方法
多くの場合、R のdplyrパッケージを使用して各グループの最初の行を選択することができます。これを行うには、次の基本構文を使用できます。
df %>% group_by (group_var) %>% arrange (values_var) %>% filter (row_number()== 1 )
次の例は、この関数を実際に使用する方法を示しています。
例: R のグループで最初の行を選択
R に次のデータセットがあるとします。
#create dataset df <- data.frame(team=c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C' ), points=c(4, 9, 7, 7, 6, 13, 8, 8, 4, 17)) #view dataset df team points 1 to 4 2 to 9 3 to 7 4 B 7 5 B 6 6 B 13 7 C 8 8 C 8 9 C 4 10 C 17
次のコードは、dplyr パッケージを使用して R のグループごとに最初の行を選択する方法を示しています。
library (dplyr) df %>% group_by (team) %>% arrange (points) %>% filter (row_number()== 1 ) # A tibble: 3 x 2 # Groups: team [3] team points 1 to 4 2 C 4 3 B 6
デフォルトでは、 arrange()は値を昇順に並べ替えますが、値を降順に並べ替えることも簡単にできます。
df %>% group_by (team) %>% arrange ( desc (dots)) %>% filter (row_number()== 1 ) # A tibble: 3 x 2 # Groups: team [3] team points 1 C 17 2 B 13 3 to 9
このコードを簡単に変更して、各グループのn番目の行を選択できることに注意してください。 row_number() == nを変更するだけです。
たとえば、グループごとに 2 行目を選択する場合は、次の構文を使用できます。
df %>% group_by (team) %>% arrange ( desc (dots)) %>% filter (row_number()== 2 )
または、次の構文を使用して、グループごとに最後の行を選択できます。
df %>% group_by (team) %>% arrange ( desc (dots)) %>% filter (row_number()== n() )