我使用tidyr::spread()
将多个分类变量分散到布尔列。由于数据包含NA,因此spread
会创建一个没有名称的新列。R - tidyr - spread() - 处理NA作为列名
我正在寻找的是一种方式来获得使用驱除掉在NAS
一)管道解决方案(我已经试过select_()
和'['()
,但不知道如何来引用NA列的名称或索引)或
b)的自定义功能,甚至会更好
C)的方式,以根本不产生NA列,Hadleyverse兼容,如果可能的话。
下面是我目前的(和非常不雅重复)解决方案。
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