Recode multiple columns using dplyr
I think it is related the column type. I added mutate_if
to convert all integer columns to numeric, and then set the recode value to be NA_real_
. It seems working.
library(dplyr)
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_if(is.integer, as.numeric) %>%
mutate_at(vars(y1:y2), funs(recode(.,`999` = NA_real_)))
z
# y1 y2 y3
# 1 1 1 TRUE
# 2 2 2 TRUE
# 3 NA NA FALSE
# 4 3 3 FALSE
# 5 4 4 TRUE
I'm having trouble understanding exactly what you want to accomplish, so let me know if this isn't quite it.
library(dplyr)
y <- data.frame(y1=c(1,2,999,3,4), y2=c(1L, 2L, 999L, 3L, 4L), y3=c(T,T,F,F,T))
y
#> y1 y2 y3
#> 1 1 1 TRUE
#> 2 2 2 TRUE
#> 3 999 999 FALSE
#> 4 3 3 FALSE
#> 5 4 4 TRUE
z <- y %>%
mutate_at(vars(y1:y2), ~ifelse(. == 999, NA, .))
z
#> y1 y2 y3
#> 1 1 1 TRUE
#> 2 2 2 TRUE
#> 3 NA NA FALSE
#> 4 3 3 FALSE
#> 5 4 4 TRUE
Now that funs
has been depreciated in dplyr, here's the new way to go:
z <- y %>%
mutate_if(is.integer, as.numeric) %>%
mutate_at(vars(y1:y2), list(~recode(.,`999` = NA_real_)))
Replace funs
with list
and insert a ~
before recode
.