整然化

概要

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_ptypesnames_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
Sponsored Link