概要
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