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