R,dplyr,基于R中的一个条件列有条件地更改多列中的值

jus*_*tin 1 r dplyr

给定以下数据框:

df <- data.frame("a" = 1:5, "b" = 2:6, "c" = 3:7, "d" = c(NA,1,1,0,0))
Run Code Online (Sandbox Code Playgroud)

我如何更改列中的值ab以及cNA是否在列值d要么NA还是0?我可以轻松地将其用于单个列,例如df[,3][df$d==0|is.na(df$d)] <- NA,但是我无法在多个列上使某些东西正常工作。我非常感谢R或R中的解决方案dplyr。谢谢

Mau*_*ers 5

你是这个意思吗

cols <- c("a", "b", "c")
df[is.na(df$d) | df$d == 0, cols] <- NA
df
#   a  b  c  d
#1 NA NA NA NA
#2  2  3  4  1
#3  3  4  5  1
#4 NA NA NA  0
#5 NA NA NA  0
Run Code Online (Sandbox Code Playgroud)

或在 dplyr

library(dplyr)
df %>% mutate_at(vars(a:c), funs(ifelse(is.na(d) | d == 0, NA, .)))
#   a  b  c  d
#1 NA NA NA NA
#2  2  3  4  1
#3  3  4  5  1
#4 NA NA NA  0
#5 NA NA NA  0
Run Code Online (Sandbox Code Playgroud)