library(tidyverse)tidyr::には、separateの他にも、正規表現でグループを指定して取り出すような関数も用意されています。
使い方はseparate関数と一緒ですが、sepではなく、regexというargumentを利用しますregexは、正規表現で「グループ」を指定することができますグループの指定の仕方は簡単で()でくくるだけとなります。
やってみましょう
dat <- tibble(tgt = c("glu:102 mg/dl","AST:41 IU/L",
"ALT:32 IU/L","GGT:33 IU/L"))
dat # A tibble: 4 × 1
tgt
<chr>
1 glu:102 mg/dl
2 AST:41 IU/L
3 ALT:32 IU/L
4 GGT:33 IU/L
これを分けてみましょう。
dat %>%
extract(col=tgt,into=c("name","value","unit"),
regex="(.+):(.+) (.+)")# A tibble: 4 × 3
name value unit
<chr> <chr> <chr>
1 glu 102 mg/dl
2 AST 41 IU/L
3 ALT 32 IU/L
4 GGT 33 IU/L
どうでしょうか?
こちらはこちらで便利ですね?
dat4 <- tibble(
tgt = c("glu010000890095",
"ast003000400050",
"alt002000300040")
)位置で分けるものも、{}での長さ指定を組み合わせると
dat4 %>%
extract(col=tgt, into=c("name","v1","v2","v3"),
regex="(.{3})(.{4})(.{4})(.{4})")# A tibble: 3 × 4
name v1 v2 v3
<chr> <chr> <chr> <chr>
1 glu 0100 0089 0095
2 ast 0030 0040 0050
3 alt 0020 0030 0040
こんな感じでできます。
それでは、練習問題を解いていきましょう。