概要
tidyr
パッケージに含まれるpivot_longer()
は、データフレームの形状を「広い」形式から「長い」形式に変換する関数です。
関連ページ
関数
pivot_longer(
data,
cols,
names_to = "name",
names_prefix = NULL,
names_sep = NULL,
names_pattern = NULL,
names_ptypes = list(),
names_repair = "check_unique",
values_to = "value",
values_drop_na = FALSE,
values_ptypes = list()
)
引数 | 指定 | 説明 |
---|---|---|
data | 必須 | データフレーム |
cols | 必須 | 行に変換したい列を指定する セレクトヘルパー関数で指定することが可能です |
names_to | 任意 | 変換前の列の列名を格納する列の列名を指定する |
names_prefix | 任意 | 変換前の列の列名から削除したい接頭辞を指定する |
names_sep names_pattern | 任意 | 変換前の列の列名を2つ以上に分割したい時に指定する 分割の条件を names_sep, names_pattern のどちらかで指定します |
names_ptypes | 任意 | 変換前の列の列名の型を指定する |
names_repair | 任意 | 変換後の列名に無効な値が含まれていた時の挙動を指定する デフォルトでは重複する列名が含まれる時にエラーを返します |
values_to | 任意 | 変換前の列の値を格納する列の列名を指定する |
values_drop_na | 任意 | 変換前の列の値が欠損値の行を除外したい場合はTRUEを指定する |
values_ptypes | 任意 | 変換前の列の値の型を指定する |
使い方
解説用データフレーム
tbl <- tibble (
id = c(1, 2, 3),
x1 = c('A', 'B', 'C'),
x2 = c('a', 'b', NA),
)
> tbl
# A tibble: 3 x 3
id x1 x2
<dbl> <chr> <chr>
1 1 A a
2 2 B b
3 3 C NA
1.基本的な使い方
# 列x1, x2を行に変換する
pivot_longer(tbl, cols = c(x1, x2))
> tbl
# A tibble: 6 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
6 3 x2 NA
2.列名の変更
# 列x1, x2を行に変換して、変換後の列名をvar, valに変更する
pivot_longer(tbl, cols = c(x1, x2),
names_to = 'var',
values_to = 'val')
> tbl
# A tibble: 6 x 3
id var val
<dbl> <chr> <chr>
1 1 x1 A
2 1 x2 a
3 2 x1 B
4 3 x2 b
5 3 x1 C
6 3 x2 NA
3.接頭辞を除外
# 列x1, x2を行に変換して、列nameから接頭辞の'x'を取り除く
pivot_longer(tbl, cols = c(x1, x2),
names_prefix = 'x')
> tbl
# A tibble: 6 x 3
id name value
<dbl> <chr> <chr>
1 1 1 A
2 1 2 a
3 2 1 B
4 3 2 b
5 3 1 C
6 3 2 NA
4.変換後の列の分割
4-1.正規表現
# 列x1, x2を行に変換して、変換前の列名をvar1, var2に分割する
pivot_longer(tbl, cols = c(x1, x2),
names_to = c('var1', 'var2'),
names_pattern = '([a-z])([0-9])')
> tbl
# A tibble: 6 x 4
id var1 var2 val
<dbl> <chr> <chr> <chr>
1 1 x 1 A
2 1 x 2 a
3 2 x 1 B
4 3 x 2 b
5 3 x 1 C
6 3 x 2 NA
4-2.文字列
# 列x1, x2を行に変換して、変換前の列名をvar1, var2に分割する
select(tbl, id, x_1 = x1, x_2 = x2) %>%
pivot_longer(cols = c(x_1, x_2),
names_to = c('var1', 'var2'),
names_sep = '_')
> tbl
# A tibble: 6 x 4
id var1 var2 val
<dbl> <chr> <chr> <chr>
1 1 x 1 A
2 1 x 2 a
3 2 x 1 B
4 3 x 2 b
5 3 x 1 C
6 3 x 2 NA
5.型変換
values_ptypes
もnames_ptypes
と同じ要領で使用します
# 列x1, x2を行に変換して、変換前の列名をvar1, var2に分割して型を変換する
pivot_longer(tbl, cols = c(x1, x2),
names_to = c('var1', 'var2'),
names_pattern = '([a-z])([0-9])',
names_ptypes = list(var1 = character(), var2 = numeric()))
> tbl
# A tibble: 6 x 4
id var1 var2 val
<dbl> <chr> <dbl> <chr>
1 1 x 1 A
2 1 x 2 a
3 2 x 1 B
4 3 x 2 b
5 3 x 1 C
6 3 x 2 NA
6.欠損値の除外
# 列x1, x2を行に変換して、欠損値を含む行を除外する
pivot_longer(tbl, cols = c(x1, x2),
values_drop_na = TRUE)
> 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