・お題:データフレームを入手したところ、ある列の項目が一つの場合だけではなく、複数の項目をカンマで区切って繋げている場合があった。行を複製して要素をばらけさせたい。
・何かのライブラリの関数でスパッとうまくような気もするが、該当するライブラリがすぐ見つからなかったので、こねくり回してやってみた。
・データセットを作る。
> library(tidyverse)
> df_test <-
+ data.frame(test_ids = c("A1", "B2", "C3","D4"),
+ Name = c("tanaka", "sato,suzuki", "yamada", "yamaguchi,tasaki,fujioka"))
> df_test
・Nameの列が、1名のこともあれば、2名3名をカンマでくっつけていることもある。これをばらけさせたい。
・行を複製することを考える。その前に、複製する行数を算出する。
> df_test <-
+ df_test %>%
+ rowwise(.) %>%
+ mutate(.,
+ Single =
+ strsplit(Name, ",") %>%
+ unlist(.) %>%
+ length(.)
+ )
> df_test
・複製した後の名前のベクトルを作っておく。
> Single <-
+ df_test$Name %>%
+ paste0(., collapse = ",") %>%
+ strsplit(., ",") %>%
+ unlist(.)
> Single
・複製する。
> library(reshape)
> df_test <-
+ df_test %>%
+ untable(., num = .$Single)
> df_test
・複製後に先に作成した名前のベクトルを放り込む。どちらかというとName列に放り込むのが筋なのだけれど、Before Afterの比較のためにSingle列に入れてみる。
> df_test$Single <- Single
> df_test
・絶対にもっと良いやり方があるはず。。。
おわり