目次
group_by()の概要
group_by()は、1つ以上の列でグループ化するための関数です。group_by()は、既存のデータフレームを受け取り、それをグループ化されたデータフレームに変換します。この操作は「グループ別」に実行されます。
group_by()の使い方
dplyr::group_by()の使い方は次になります。
group_by(.data, ..., .add = FALSE, .drop = group_by_drop_default(.data))
group_by()の引数の意味
データフレームまたはデータフレーム拡張(例:tibble)、遅延データフレーム(例:dbplyrまたはdtplyrから)を指定します。
group_by()では、グループ化する変数または計算です。
計算は常にグループ化されていないデータフレームで実行されます。グループ化されたデータで計算を実行するには、group_by()の前に別のmutate()ステップを使用する必要があります。nest_by()では計算は許可されません。ungroup()では、グループ化から削除する変数です。
デフォルトのFALSEの場合、group_by()は既存のグループを上書きします。既存のグループに追加するには、.add = TRUE を使用します。
この引数は以前はaddと呼ばれていましたが、addという新しいグループ化変数を作成できず、命名規則と競合します。
データに表示されない因子レベルによって形成されたグループを削除するかどうかを指定します。
.data が以前に .drop = FALSEでグループ化されている場合を除き、デフォルトはTRUEです。
ungroup()の概要
group_by()は、グループ化を解除するための関数です。
dplyr::ungroup()の使い方は次になります。
ungroup(x, ...)
ungroup()の引数の意味
データフレームを指定します。
summarise()の概要
summarise()は、各グループを1行にまとめるための関数です。summarise()は新しいデータフレームを作成します。グループ化変数の組み合わせごとに1行を返します。グループ化列がない場合、出力には入力内のすべての観測値を要約した1行が含まれます。グループ化変数ごとに1列、指定した要約統計ごとに1列が含まれます。
summarise()とsummary()は同義語です。
summarise(.data, ..., .by = NULL, .groups = NULL)
summarize(.data, ..., .by = NULL, .groups = NULL)
データフレームまたはデータフレーム拡張(例:tibble)、遅延データフレーム(例:dbplyrまたはdtplyrから)を指定します。
集計関数の名前と値のペアを指定します。
名前は結果の変数の名前になります。値は次のようになります。
- 長さ1のベクトル(例: min(x)、n()、sum(is.na(y))
- 単一の式から複数の列を追加するためのデータフレーム
[非推奨]サイズが0または1より大きい値を返すことは、1.1.0以降非推奨になりました。代わりにreframe()を使用します。
tidy-selectを指定できます。オプションで、この操作のみでグループ化する列の選択を指定します。
group_by()の代替として機能します。
[試験的]結果のグループ化構造を指定します。
- drop_last: グループ化の最後のレベルを削除します。これはバージョン1.0.0より前で唯一サポートされていたオプションでした
- drop: グループ化のすべてのレベルが削除されます
- keep: .dataと同じグループ化構造です
- rowwise: 各行は独自のグループです
.groupsが指定されていない場合は、結果の行数に基づいて選択されます。
- すべての結果が1行の場合、「drop_last」が返されます。
- 行数が変化する場合は、「keep」が返されます(可変行数を返すことは、すべてのレベルのグループ化を無条件に削除するreframe()に取って代わられたため、非推奨になりました)。
さらに、結果がグループ化されていない場合、オプション「dplyr.summarise.inform」がFALSEに設定されている場合、またはsummarise()がパッケージ内の関数から呼び出された場合を除き、その選択を通知するメッセージが表示されます。
準備
あらかじめ、tidyverseパッケージを読み込んでおきます。
library(tidyverse)
解説のために、次のirisデータセットを使用します。
iris |>
head()
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
グループごとに集計
irisデータセットで、列Speciesをグループとして、列Sepal.LengthとSepal.Width、Petal.Length、Petal.Widthを用いていくつかの要約として集計するには次のようにします。
iris |>
group_by(Species) |>
summarise(
n = n(), # グループサイズ
Sepal.Length_mean = mean(Sepal.Length), # Sepal.Lengthの平均値
Sepal.Width_max = max(Sepal.Width), # Sepal.Widthの最大値
Petal.Length_min = min(Petal.Length), # Petal.Lengthの最小値
Petal.Width_sd = sd(Petal.Width) # Petal.Widthの標準偏差
)
# A tibble: 3 × 6
Species n Sepal.Length_mean Sepal.Width_max Petal.Length_min Petal.Width_sd
1 setosa 50 5.01 4.4 1 0.105
2 versicolor 50 5.94 3.4 3 0.198
3 virginica 50 6.59 3.8 4.5 0.275