基本的な関数
dplyr
パッケージに含まれるgroup_by()とungroup()
は、行のグループ化と解除を行う関数です。グループ化はそれだけでは意味がありませんが、summarise()
や mutate()
などと組み合わせることで真価を発揮します。
概要
# グループ化を行う
group_by(
.data, # テーブルを指定
..., # グループ化する列を指定
add = FALSE, # 既存のグループ化構造を引き継ぐ
.drop = TRUE # 存在しない要因を集計の対象に含める
)
# グループ化を解除する
ungroup(
x, # テーブルを指定
... # グループ化を解除する列を指定(未指定の場合は全ての列が対象)
)
使い方
1-1. 列のグループ化
# テーブルの作成
tbl <- tibble(
key1 = c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
key2 = c('X', 'X', 'Y', 'Y', 'X', 'X', 'Y', 'Y'),
value = c(1, 2, 3, 4, 5, 6, 7, 8),
)
# グループ化を行う
group_by(tbl, key1)
1-2. 複数列のグループ化
add = TRUE
を指定することで、グループ情報を追加することができます。デフォルト(add = FALSE
)では既存のグループ情報を上書きします。
以下のコードは、どちらも同じ結果を返します。
# 複数列の指定
group_by(tbl, key1, key2)
# 列を追加で指定
group_by(tbl, key1) %>%
group_by(key2, add = TRUE)
1-3. 存在しない要因を削除しない
.drop = FALSE
を指定することで、存在しない要因(key1 = C
)を集計の対象に含めることができます。
# テーブルの更新
tbl2 <- mutate(tbl, key1 = factor(key1, levels = c('A', 'B', 'C')))
# 存在しない要因を削除せず、要因をカウントする
group_by(tbl2, key1, .drop = FALSE) %>%
summarise(count = n())
2-1. グループ化の解除
# テーブルの更新
tbl3 <- group_by(tbl, key1)
# グループ化を解除する
ungroup(tbl3)
スコープ付き関数
dplyr
パッケージに含まれるgroup_by()
のスコープ付き関数は、行のグループ化を簡潔なコードで記述できる関数です。
スコープ付き関数の基本的な使い方は専用の解説ページを参照してください。
概要
group_by_all(
.tbl, # テーブルを指定
.funs = list(), # グループ化する列に適応する関数を指定
..., # 未使用
.add = FALSE, # 既存のグループ化構造を引き継ぐ
.drop = TRUE # 存在しない要因を集計の対象に含める
)
group_by_at(
.tbl, # テーブルを指定
.vars, # グループ化の対象となる列を変数または文字列で指定
.funs = list(), # グループ化する列に適応する関数を指定
..., # 未使用
.add = FALSE, # 既存のグループ化構造を引き継ぐ
.drop = TRUE # 存在しない要因を集計の対象に含める
)
group_by_if(
.tbl, # テーブルを指定
.predicate, # グループ化の対象となる列を戻り値がBool型の関数で指定
.funs = list(), # グループ化する列に適応する関数を指定
..., # 未使用
.add = FALSE, # 既存のグループ化構造を引き継ぐ
.drop = TRUE # 存在しない要因を集計の対象に含める
)
使い方
group_by_all()
は使い道がないため解説を省略します。
3-1 文字列または変数を用いたグループ化
# 文字列で指定した列(key1)をグループ化する
group_by_at(tbl, .vars = c('key1'))
3-2 関数を用いたグループ
# 文字列型の列をグループ化して、factor型に変換する
group_by_if(tbl, .predicate = is.character, .funs = as.factor)
その他の関数
dplyr
パッケージに含まれるgroup_trim()
は、既存のグループ化構造を再計算する関数です。group_by(.drop = FALSE)
や filter(.preserve = TRUE)
を無効化する際に使用します。
概要
# グループ化構造の再計算を行う
group_trim(
.tbl, # テーブルを指定
.drop = TRUE # 存在しない要因を集計の対象に含める
)
使い方
4-1. グループ化構造の再計算
# テーブルの更新
tbl4 <- group_by(tbl2, key1, .drop = FALSE)
# グループ化構造を再計算して、要因をカウントする
group_trim(tbl4) %>%
summarise(n = n())