グループ化

基本的な関数

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())

Sponsored Link