Dplyrの1つを除くすべての列でグループ化する方法
R のdplyrパッケージを使用して、次の基本構文を使用して、データ フレーム内の 1 つを除くすべての列をグループ化できます。
df %>%
group_by(across(c( - this_column)))
この特定の例では、 this_columnと呼ばれる列を除くすべての列によってデータ フレームをグループ化します。
数式内の負符号 ( – ) は、 dplyrに group_by()関数の特定の列を除外するよう指示することに注意してください。
次の例は、この構文を実際に使用する方法を示しています。
例: dplyr の 1 つを除くすべての列でグループ化します。
R に、さまざまなバスケットボール選手に関する情報を含む次のデータ フレームがあるとします。
#create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), position=c('G', 'G', 'F', 'F', 'G', 'G', 'F', 'F'), starter=c('Y', 'Y', 'Y', 'N', 'Y', 'N', 'N', 'N'), dots=c(99, 104, 119, 113)) #view data frame df team position starter points 1 AGY 99 2 AGY 104 3 AFY 119 4 AFN 113 5 BGY 99 6 BGN 104 7 BFN 119 8 BFN 113
ここで、データ フレーム内の他のすべての列にわたってグループ化されたポイント列の最大値を見つけたいとします。
これを行うには、次の構文を使用できます。
library (dplyr) #group by all columns except points column and find max points df %>% group_by(across(c( - points))) %>% mutate(max_points = max(points)) # A tibble: 8 x 5 # Groups: team, position, starter [6] team position starter points max_points 1 AGY 99 104 2 AGY 104 104 3 AFY 119 119 4 AFN 113 113 5 BGY 99 99 6 BGN 104 104 7 BFN 119 119 8 BFN 113 119
結果から次のことがわかります。
- チーム値 A、ポジション値 G、および開始値 Y を持つすべてのプレーヤーの最大ポイント値は104でした。
- チーム値 A、ポジション値 F、および開始値 Y を持つすべてのプレーヤーの最大ポイント値は119でした。
- チーム値 A、ポジション値 F、および開始値 N を持つすべてのプレーヤーの最大ポイント値は113でした。
等々。
ドットを除くすべての列名をgroup_by()関数に入力した場合にも同じ結果が得られることに注意してください。
library (dplyr) #group by all columns except points column and find max points df %>% group_by(across(c(team, position, starter))) %>% mutate(max_points = max(points)) # A tibble: 8 x 5 # Groups: team, position, starter [6] team position starter points max_points 1 AGY 99 104 2 AGY 104 104 3 AFY 119 119 4 AFN 113 113 5 BGY 99 99 6 BGN 104 104 7 BFN 119 119 8 BFN 113 119
これは前の例の結果に対応します。
ただし、他のすべての列の名前を入力するよりも、 group_by()関数でポイント列を除外する方がはるかに簡単であることに注意してください。
追加リソース
次のチュートリアルでは、dplyr を使用して他の一般的なタスクを実行する方法について説明します。
dplyrを使用して特定の文字列を含む行をフィルタリングする方法
dplyr を使用して相対周波数を計算する方法
dplyrを使用してグループごとに最初の行を選択する方法