我有一个数据框,其中我重新编码了几列,将999设为NA
dfB <-dfA %>%
mutate(adhere = if_else(adhere==999, as.numeric(NA), adhere)) %>%
mutate(engage = if_else(engage==999, as.numeric(NA), engage)) %>%
mutate(quality = if_else(quality==999, as.numeric(NA), quality)) %>%
mutate(undrstnd = if_else(undrstnd==999, as.numeric(NA), undrstnd)) %>%
mutate(sesspart = if_else(sesspart==999, as.numeric(NA), sesspart)) %>%
mutate(attended = if_else(attended>=9, as.integer(NA), attended))
我希望使用mutate_at()和一系列列以及recode()来替代if_else(),但我不知道如何设置条件。我认为可以根据一些mutate_all的示例,使用类似于999
=NA的方式--但我还需要让NA与.x的类型匹配,我不确定如何使其类型敏感。
我尝试了:
y <- data.frame(y1=c(1,2,999,3,4), y2=c(1L, 2L, 999L, 3L, 4L), y3=c(T,T,F,F,T))
z <- y %>%
mutate_at( vars(y1:y2), funs(recode(.,`999` = as.numeric(NA))))
但我收到了一个警告:“未替换的值被视为NA,因为.x不兼容。请详尽说明替换内容或提供.default”,我可以看到它适用于数字列,但不适用于整数列y2。
> z
y1 y2 y3
1 1 NA TRUE
2 2 NA TRUE
3 NA NA FALSE
4 3 NA FALSE
5 4 NA TRUE