132  extract() 解説と実践

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 

こんな感じでできます。

それでは、練習問題を解いていきましょう。