値の分解

概要

tidyrパッケージに含まれるseparate()は、指定した列の値を分解する関数です。

関連ページ

関数

separate(
  data,
  col,
  into,
  sep = "[^[:alnum:]]+",
  remove = TRUE,
  convert = FALSE,
  extra = "warn",
  fill = "warn",
  ...
)
引数指定説明
data必須データフレーム
col必須分解したい値を持つ列名を指定する
into必須分解後の値を格納する列名を指定する
sep任意分解に使用する接続詞を指定する
remove任意結合前の値を削除したくない場合は FALSE を指定する
convert任意分解後の列を適切な型に変換したい場合は TRUE を指定する
extra任意分解後の値が into で指定した列よりも多い時の挙動を指定する
drop: 余った文字を削除する
merge: 余った文字を最後の列に結合する
fill任意分解後の値が into で指定した列よりも少ない時の挙動を指定する
right: 先に指定した列から順に値を格納する
left: 後に指定した列から順に値を格納する

使い方

解説用データフレーム

df <- tibble(
  y1 = c('A_1', 'B_2', '3'),
)
> df
# A tibble: 3 x 1
  y1
  <chr>
1 A_1
2 B_2
3 3

1.値の分解

1-1.基本的な使い方

分解後の値が into で指定した列よりも多いまたは少ない場合はエラーが出力されます。

# 列y1の値を'_'で分解して、列x1, x2に格納する
separate(df, col = y1, into = c('x1', 'x2'), sep = '_')
Expected 2 pieces. Missing pieces filled with `NA` in 1 rows [3].

# A tibble: 3 x 2
  x1    x2
  <chr> <chr>
1 A     1
2 B     2
3 3     NA

1-2.分解後の値が少ない場合

欠損値を末尾に寄せたい場合は fill = 'right' を指定します。

# 列y1の値を'_'で分解して、欠損値を先頭に寄せて列x1, x2に格納する
separate(df, col = y1, into = c('x1', 'x2'), sep = '_', fill = 'left')
# A tibble: 3 x 2
  x1    x2
  <chr> <chr>
1 A     1
2 B     2
3 NA    3

1-3.分解後の値が多い場合

削除

# 列y1の値を'_'で分解して、余った文字を削除してから列x1に格納する
separate(df, col = y1, into = c('x1'), sep = '_', extra = 'drop')
# A tibble: 3 x 1
  x1
  <chr>
1 A # 1 を削除
2 B # 2 を削除
3 3

結合

# 列y1の値を'_'で分解して、余った文字を結合してから列x1に格納する
separate(df, col = y1, into = c('x1'), sep = '_', extra = 'merge')
# A tibble: 3 x 1
  x1
  <chr>
1 A_1 # 1 を追加
2 B_2 # 2 を追加
3 3

2.オプション

2-1.分解前の値を保持する

# 列y1の値を'_'で分解して、欠損値を先頭に寄せて列x1, x2に格納して、分解前の列を保持する
separate(df, col = y1, into = c('x1', 'x2'), sep = '_', fill = 'left', remove = FALSE)
# A tibble: 3 x 3
  y1    x1       x2
  <chr> <chr> <dbl>
1 A_1   A         1
2 A_2   B         2
3 3     NA        3

2-2.分解後の型を変換する

# 列y1の値を'_'で分解して、欠損値を先頭に寄せて列x1, x2に格納して、分解後の列の型を適切に変換する
separate(df, col = y1, into = c('x1', 'x2'), sep = '_', fill = 'left', convert = TRUE)
# A tibble: 3 x 2
  x1       x2
  <chr> <dbl>
1 A         1
2 B         2
3 NA        3
Sponsored Link