我正在使用将多个分类变量传播到布尔列tidyr::spread()
。由于数据包含 NA,因此spread
创建一个没有名称的新列。
我正在寻找的是一种摆脱NA的方法
a)管道解决方案(我已经尝试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