我希望找到一种简单的方法来执行类似下面的操作,但使用dplyr,基本上只需在满足条件时用NA替换3列中的值。
dta[dta$na.ind == 1, c('x1', 'x2', 'x3')] <- NA
我能想到使用dplyr的唯一方法如下,但我觉得应该有一个更简单的方法
dta <- dta %>%
mutate(x1 = ifelse(na.ind == 1, NA, x1),
x2 = ifelse(na.ind == 1, NA, x2),
x3 = ifelse(na.ind == 1, NA, x3))
谢谢!
答案 0 :(得分:4)
您可以使用mutate_at
并将x1,x2,x3
列传递给.vars
参数:
dta <- data.frame(na.ind = 1:3, x1 = 2:4, x2 = 2:4, x3 = 2:4, x4 = 2:4)
dta
# na.ind x1 x2 x3 x4
#1 1 2 2 2 2
#2 2 3 3 3 3
#3 3 4 4 4 4
dta %>% mutate_at(.vars = c("x1", "x2", "x3"), funs(ifelse(na.ind == 1, NA, .)))
# na.ind x1 x2 x3 x4
#1 1 NA NA NA 2
#2 2 3 3 3 3
#3 3 4 4 4 4
答案 1 :(得分:1)
如果你想在NA的任何一列中以数据框架方式替换特定值(-99999):
dat %>% mutate_all(funs(ifelse(.==-99999, NA, .)))