を使用して、複数のカテゴリ変数をブール列に展開していますtidyr::spread()
。データには NA が含まれているspread
ため、名前のない新しい列を作成します。
私が探しているのは、を使用してNAを取り除く方法です
select_()
a) パイピング ソリューション (およびを試しまし'['()
たが、NA 列の名前またはインデックスを参照する方法がわかりません) または
b)さらに優れたカスタム関数
c) 可能であれば、Hadleyverse と互換性のある NA 列を単純に生成しない方法。
以下は、私の現在の(そして非常に洗練されていない)ソリューションです。
library(tidyr)
library(dplyr)
test <- data.frame(id = 1:4, name = c("anna", "bert", "charles", "daniel"),
flower = as.factor(c("rose", "rose", NA, "petunia")),
music = as.factor(c("pop","classical", "rock", NA)),
degree = as.factor(c(NA, "PhD", "MSc", "MSc")))
test <- test %>%
mutate(truval = TRUE) %>%
spread(key = flower, value = truval, fill = FALSE)
test[ncol(test)] <- NULL
test <- test %>%
mutate(truval = TRUE) %>%
spread(key = music, value = truval, fill = FALSE)
test[ncol(test)] <- NULL
test <- test %>%
mutate(truval = TRUE) %>%
spread(key = degree, value = truval, fill = FALSE)
test[ncol(test)] <- NULL
test