Rでデータハンドリングをする際に空文字の置換に関する情報が少なかったので記事にしました。
困っている方の参考になれば幸いです。
データ作成
library(tidyverse)
gender <- c("F", "F", "M", "M", "M")
answer_1 <- c('', 'x', '', '', 'x')
answer_2 <- c('x', '', 'x', '', 'x')
answer_3 <- c('', '', '', '', 'x')
df <- data.frame(GENDER=gender
, ANSWER_1=answer_1
, ANSWER_2=answer_2
, ANSWER_3=answer_3)
gender | ANSWER_1 | ANSWER_2 | ANSWER_3 |
---|---|---|---|
F | x | ||
F | x | ||
M | x | ||
M | |||
M | x | x | x |
上記のようにnullではなく空文字が入っている処理の対応に苦戦しました。
もしnaであればmutate_all(~ifelse(is.nan(.),0,.))とすれば良いというのはいくつか見ましたが、空文字の場合どうすればよいのかというのがわからず時間がかかりました。
空文字の置換
is.nan(.)の部分を.==''にすることで対応できました。
df_fix <- df %>%
mutate_all(~ifelse(.=='',0,.))
gender | ANSWER_1 | ANSWER_2 | ANSWER_3 |
---|---|---|---|
F | 0 | x | 0 |
F | x | 0 | 0 |
M | 0 | x | 0 |
M | 0 | 0 | 0 |
M | x | x | x |
ついでにxを1に変換する処理を追加する場合はこちら
df_fix <- df %>%
mutate_all(~ifelse(.=='',0,.)) %>%
mutate_all(~ifelse(.=='x',1,.))
gender | ANSWER_1 | ANSWER_2 | ANSWER_3 |
---|---|---|---|
F | 0 | 1 | 0 |
F | 1 | 0 | 0 |
M | 0 | 1 | 0 |
M | 0 | 0 | 0 |
M | 1 | 1 | 1 |
個人的にはこちらの記事が参考になりました。
ifelseの使い方を知っていればすぐに解決しそうでした。