概要
tidyr
パッケージに含まれるseparate()
は、指定した列の値を分解する関数です。
関連ページ
関数
1 2 3 4 5 6 7 8 9 10 11 | 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: 後に指定した列から順に値を格納する |
使い方
解説用データフレーム
1 2 3 | 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
で指定した列よりも多いまたは少ない場合はエラーが出力されます。
1 2 | # 列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'
を指定します。
1 2 | # 列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.分解後の値が多い場合
削除
1 2 | # 列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 |
結合
1 2 | # 列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.分解前の値を保持する
1 2 | # 列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.分解後の型を変換する
1 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 |