148

I regularly need to change the values of a variable based on the values on a different variable, like this:

mtcars$mpg[mtcars$cyl == 4] <- NA

I tried doing this with dplyr but failed miserably:

mtcars %>%
mutate(mpg = mpg == NA[cyl == 4]) %>%
as.data.frame()

How could I do this with dplyr?

0

2 Answers 2

371
Answer recommended by R Language Collective

We can use replace to change the values in 'mpg' to NA that corresponds to cyl==4.

mtcars %>%
     mutate(mpg=replace(mpg, cyl==4, NA)) %>%
     as.data.frame()
0
11

Here is another option using a simple ifelse:

library(dplyr)
mtcars %>%
  mutate(mpg = ifelse(cyl == 4, NA, mpg))

Output head:

#>                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
#> Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
#> Datsun 710            NA   4 108.0  93 3.85 2.320 18.61  1  1    4    1
#> Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
#> Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2

Another option could be using case_when which could be extended to more conditions:

mtcars %>%
  mutate(mpg = case_when(cyl == 4 ~ NA,
                         TRUE ~ mpg))

Not the answer you're looking for? Browse other questions tagged or ask your own question.