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() )

追加リソース

Rで線を配置する方法
R でグループごとの観測値をカウントする方法
Rのグループごとの最大値を見つける方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です