使用dplyr重新编码多个列

我有一个数据框,我在其中重新编码了几列,以便将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
我无法准确理解你想要完成什么,所以让我知道这是不是真的.

library(tidyverse)

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 = vars(y1:y2), 
            .funs = funs(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
相关文章
相关标签/搜索