値の分解(正規表現)

概要

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

関連ページ

関数

extract(
  data,
  col,
  into,
  regex = "([[:alnum:]]+)",
  remove = TRUE,
  convert = FALSE,
)
引数指定説明
data必須データフレーム
col必須分解したい値を持つ列名を指定する
into必須分解後の値を格納する列名を指定する
regex任意元の列の正規表現を指定する
分解して取得したい値を(...)で囲います
remove任意結合前の値を削除したくない場合は FALSE を指定する
convert任意分解後の列を適切な型に変換したい場合は TRUE を指定する

使い方

解説用データフレーム

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

1.値の分解

1-1.正規表現

元の列が指定した正規表現と一致しない場合は、分解後の全ての列にNAが格納されます。

# 文字と数値の組み合わせを"_"で分割する正規表現
regex = '([[:alnum:]]+)_([[:alnum:]]+)'

# 列x1を指定した正規表現に従い列y1, y2に分解する
df %>% extract(col = x1, into = c('y1', 'y2'), regex = regex)
# A tibble: 3 x 2
  y1    y2
  <chr> <chr>
1 A     1
2 B     2
3 NA    NA

2.オプション

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

# 列x1を指定した正規表現に従い列y1, y2に分解する
df %>% extract(col = x1, into = c('y1', 'y2'), regex = regex, remove = FALSE)
# A tibble: 3 x 3
  x1    y1    y2
  <chr> <chr> <chr>
1 A_1   A     1
2 A_2   B     2
3 3     NA    NA

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

# 列x1を指定した正規表現に従い列y1, y2に分解して、分解後の列を適切な型に変換する
df %>% extract(col = x1, into = c('y1', 'y2'), regex = regex, convert = TRUE)
# A tibble: 3 x 2
  y1       y2
  <chr> <dbl>
1 A         1
2 B         2
3 NA       NA
Sponsored Link