在dplyr中给定条件时更改多个列值

时间:2017-03-19 14:53:34

标签: r dplyr

我希望找到一种简单的方法来执行类似下面的操作,但使用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))

谢谢!

2 个答案:

答案 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, .)))