非整然化

概要

tidyrパッケージに含まれるpivot_wider()は、データフレームの形状を「長い」形式から「広い」形式に変換する関数です。

関連ページ

関数

pivot_wider(
  data,
  id_cols = NULL,
  names_from = name,
  names_prefix = "",
  names_sep = "_",
  names_repair = "check_unique",
  values_from = value,
  values_fill = NULL,
  values_fn = NULL
)
引数指定説明
data必須データフレーム
id_cols任意keyになる列を指定する
names_from必須変換後の列の列名に使用する列を指定する
names_prefix任意変換後の列の列名に追加したい接頭辞を指定する
names_sep任意変換後の列の列名を複数の列から生成したい時に接続詞を指定する
names_repair任意変換後の列名に無効な値が含まれていた時の挙動を指定する
デフォルトでは重複する列名が含まれる時にエラーを返します
values_from任意変換後の列の値に使用する列を指定する
values_fill任意変換後の列の値の初期値を指定する
values_fn任意変換後の列の値が複数の値から成る時に指定する
値に適応する関数(mean, maxなど)を指定します

使い方

解説用データフレーム

tbl <- tibble (
  id = c(1, 1, 2, 2, 3),
  name = c('x1', 'x2', 'x1', 'x2', 'x1'),
  value = c('A', 'a', 'B', 'b', 'C'),
)
> tbl
# A tibble: 5 x 3
     id name  value
  <dbl> <chr> <chr>
1     1 x1    A
2     1 x2    a
3     2 x1    B
4     3 x2    b
5     3 x1    C

1.基本的な使い方

# 列nameを列名に変換して, 列valueを対応するセルに変換する
pivot_wider(tbl, id_cols = id,
            names_from = name,
            values_from = value)
# A tibble: 3 x 3
     id x1    x2
  <dbl> <chr> <chr>
1     1 A     a
2     2 B     b
3     3 C     NA

2.接頭辞の追加

# 接頭に'var'を追加した列nameを列名に変換して, 列valueを対応するセルに変換する
pivot_wider(tbl, id_cols = id,
            names_from = name,
            values_from = value,
            names_prefix = 'var')
# A tibble: 3 x 3
     id varx1 varx2
  <dbl> <chr> <chr>
1     1 A     a
2     2 B     b
3     3 C     NA

3.複数の列を列名に使用する

# 列name, name2を列名に変換して, 列valueを対応するセルに変換する
mutate(tbl, name2 = name) %>%
  pivot_wider(id_cols = id,
              names_from = c(name, name2),
              values_from = value,
              names_sep = '-')
# A tibble: 3 x 3
     id x1-x1 x2-x2
  <dbl> <chr> <chr>
1     1 A     a
2     2 B     b
3     3 C     NA

4.欠損値の置換

# 列nameを列名に変換して, 列valueを対応するセルに変換する
pivot_wider(tbl, id_cols = id,
            names_from = name,
            values_from = value,
            values_fill = list(value = 'c'))
# A tibble: 3 x 3
     id x1    x2
  <dbl> <chr> <chr>
1     1 A     a
2     2 B     b
3     3 C     c

5.関数を適応する

# 説明用テーブル
tbl <- tibble (
  id = c(1, 1, 1, 2, 2),
  name = c('x1', 'x1', 'x1', 'x1', 'x1'),
  value = c(1, 2, 3, 4, 5),
)

# 列nameを列名に変換して, 列valueの値の合計を取得する
pivot_wider(tbl, id_cols = id,
            names_from = name,
            values_from = value,
            values_fn = list(value = sum))
> tbl
# A tibble: 5 x 3
     id name  value
  <dbl> <chr> <dbl>
1     1 x1        1
2     1 x1        2
3     1 x1        3
4     2 x1        4
5     2 x1        5

# A tibble: 3 x 3
     id    x1
  <dbl> <chr>
1     1     6
2     2     9
Sponsored Link