Rのグループごとに最初のn個の値を選択する方法


次のいずれかの方法を使用して、R のグループごとに上位 N 個の値を選択できます。

方法 1: グループごとに最初の N 個の値を選択します (同順位を無視します)

 library (dplyr)

#select top 5 values by group
df %>% 
  arrange(desc(values_column)) %>% 
  group_by(group_column) %>%
  slice(1:5)

方法 2: グループごとに最初の N 個の値を選択します (同順位を含む)

 library (dplyr)

#select top 5 values by group
df %>%
  group_by(group_column) %>%
  top_n(5, values_column)

次の例は、R の次のデータ フレームで各メソッドを使用する方法を示しています。

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
                 points=c(19, 22, 15, NA, 14, 25, 25, 25),
                 rebounds=c(10, 6, 3, 7, 11, 13, 9, 12))

#view data frame
df

  team points rebounds
1 A 19 10
2 to 22 6
3 to 15 3
4 A NA 7
5 B 14 11
6 B 25 13
7 B 25 9
8 B 25 12

例 1: グループごとに最初の N 個の値を選択します (同順位を無視します)

次のコードは、チームごとにグループ化され、最も高いポイント値を持つ最初の 2 行を選択する方法を示しています。

 library (dplyr)

#select top 2 rows with highest points values, grouped by team 
df %>% 
  arrange(desc(points)) %>% 
  group_by(team) %>%
  slice(1:2)

# A tibble: 4 x 3
# Groups: team [2]
  team points rebounds
        
1 to 22 6
2 A 19 10
3 B 25 13
4 B 25 9

結果には、各チームのポイントの最高値を含む 2 つの行が含まれます。

チーム B の場合、実際にはポイントの最高値 ( 25 ) に一致する行が 3 行ありましたが、出力では 2 行のみが返されることに注意してください。

このメソッドは単にリンクを無視します。

例 2: グループごとに最初の N 個の値を選択します (同順位を含む)

次のコードは、チームごとにグループ化され、最も高いポイント値を持つ最初の 2 行を選択する方法を示しています。

 library (dplyr)

#select top 2 rows with highest points values, grouped by team 
df %>%
  group_by(team) %>%
  top_n(2, dots)

# A tibble: 5 x 3
# Groups: team [2]
  team points rebounds
        
1 A 19 10
2 to 22 6
3 B 25 13
4 B 25 9
5 B 25 12

結果には、各チームのポイントの最高値を含む 2 つの行が含まれます。

チーム B では、3 つのラインが最高ポイント値 ( 25 ) で同点になったため、この方法では最終結果にそれらの 3 つのラインが含まれていることに注意してください。

追加リソース

次のチュートリアルでは、R で他の一般的な操作を実行する方法について説明します。

R の任意の列に値が表示される行を選択する方法
R で特定の列を選択する方法
R でインデックスによって列を選択する方法

コメントを追加する

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