097 特殊加工:separateで列をわける
separateで列をうめる
- 練習問題を再度みてみましよう。
- 任意の文字列で列を分割するseparate関数を利用してみましょう。
dft <- tibble( target3 = c( "ope:A 4.5hr 80ml", "ope:B 3hr 10ml", "ope:C 12.5hr 100ml" ) ) dft
- separate(data, col, into, sep)で利用します。
- dataはデータフレーム、colはコラム名。
- intoは、分割した後のコラム名、
- sepは分割のしるしとなる文字列
dft %>% separate(col = target3, into = c("OPE","HR","ML"), sep=" ")
- このように、スペース(\s)で3つのコラムに分割され、もともとのtarget3は消えて、そのかわり、intoで指定した、OPE, HR, MLが出現しています。
dft %>% separate(col = target3, into = c("OPE", "HR", "ML"), sep=" ", remove = FALSE)
尚、remove=FALSEとすることで、削除せずに残すことも可能です。
課題:OPEコラムから、set_extractを使わずにオペ名を取り出してみましょう
dft %>% separate(col = target3, into = c("OPE", "HR", "ML"), sep=" ") %>% separate(col = OPE, into = c("ope","opename"), sep = ":") %>% select(opename)
- str_extractを利用すると、
dft %>% mutate(opename = str_extract(target3,"(?<=:)\\w+"))
- とより簡潔に書けますが、状況によっては、str_extractの正規表現が難しいケースもあり、そういう場合には、separateを利用することがよいと思います。