Rのグループごとの最大値を見つける方法


R のデータ フレーム内の各グループの最大値を見つけたい場合がよくあります。幸いなことに、これはdplyrパッケージの関数を使用して簡単に実行できます。

このチュートリアルでは、次のデータ フレームを使用してこれを行う方法について説明します。

 #create data frame
df <- data.frame(team = c('A', 'A', 'A', 'B', 'B', 'B', 'B'),
                 position = c('G', 'F', 'F', 'G', 'G', 'G', 'F'),
                 points = c(12, 15, 19, 22, 34, 34, 39))

#view data frame
df

  team position points
1 AG 12
2 AF15
3 FY 19
4 BG 22
5 BG 34
6 BG 34
7 BF 39

例 1: グループごとの最大値を求める

次のコードは、チームごと、ポジションごとの最大値を見つける方法を示しています。

 library(dplyr)

#find max value by team and position
df %>%
  group_by (team, position) %>%
  summarize (max = max(points, na.rm= TRUE ))

# A tibble: 4 x 3
# Groups: team [?]
  team position max
      
1AF 19.0
2 AG 12.0
3 BF 39.0
4 BG 34.0

例 2: グループごとの最大値を含む行を返す

次のコードは、チームごとおよびポジションごとの最大値を含む行を返す方法を示しています。

 library(dplyr)

#find rows that contain max points by team and position
df %>%
  group_by (team, position) %>%
  filter (points == max(points, na.rm= TRUE ))

# A tibble: 5 x 3
# Groups: team, position [4]
  team position points
       
1 AG 12.0
2AF 19.0
3 BG 34.0
4 BG 34.0
5BF 39.0

例 3: グループごとの最大値を含む 1 行を返します。

前の例では、チーム A に最大のポイント数を持ち、どちらもポジション G にいた 2 人のプレーヤーがいました。最大値を持つ最初のプレーヤーだけをグループに戻したい場合は、スライス()を使用できます。 ) 関数。次のように動作します。

 library(dplyr)

#find rows that contain max points by team and position
df %>%
  group_by (team, position) %>%
  slice (which.max(points))

# A tibble: 4 x 3
# Groups: team, position [4]
  team position points
       
1AF 19.0
2 AG 12.0
3 BF 39.0
4 BG 34.0

追加リソース

完全ガイド: R でデータをグループ化して要約する方法
R で行をフィルターする方法
Rで重複行を削除する方法

コメントを追加する

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