This is a translation of the SQL command NULLIF. It is useful
if you want to convert an annoying value to NA.
na_if(x, y)Vector to modify
Value to replace with NA
A modified version of x that replaces any values that
are equal to y with NA.
coalesce() to replace missing values with a specified
value.
tidyr::replace_na() to replace NA with a value.
recode() to more generally replace values.
na_if(1:5, 5:1)
#> [1] 1 2 NA 4 5
x <- c(1, -1, 0, 10)
100 / x
#> [1] 100 -100 Inf 10
100 / na_if(x, 0)
#> [1] 100 -100 NA 10
y <- c("abc", "def", "", "ghi")
na_if(y, "")
#> [1] "abc" "def" NA "ghi"
# na_if() is particularly useful inside mutate(),
# and is meant for use with vectors rather than entire data frames
starwars %>%
select(name, eye_color) %>%
mutate(eye_color = na_if(eye_color, "unknown"))
#> # A tibble: 87 × 2
#> name eye_color
#> <chr> <chr>
#> 1 Luke Skywalker blue
#> 2 C-3PO yellow
#> 3 R2-D2 red
#> 4 Darth Vader yellow
#> 5 Leia Organa brown
#> 6 Owen Lars blue
#> 7 Beru Whitesun lars blue
#> 8 R5-D4 red
#> 9 Biggs Darklighter brown
#> 10 Obi-Wan Kenobi blue-gray
#> # … with 77 more rows
# na_if() can also be used with mutate() and across()
# to mutate multiple columns
starwars %>%
mutate(across(where(is.character), ~na_if(., "unknown")))
#> # A tibble: 87 × 14
#> name height mass hair_color skin_color eye_color birth_year sex gender
#> <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr>
#> 1 Luke Sk… 172 77 blond fair blue 19 male mascu…
#> 2 C-3PO 167 75 NA gold yellow 112 none mascu…
#> 3 R2-D2 96 32 NA white, bl… red 33 none mascu…
#> 4 Darth V… 202 136 none white yellow 41.9 male mascu…
#> 5 Leia Or… 150 49 brown light brown 19 fema… femin…
#> 6 Owen La… 178 120 brown, gr… light blue 52 male mascu…
#> 7 Beru Wh… 165 75 brown light blue 47 fema… femin…
#> 8 R5-D4 97 32 NA white, red red NA none mascu…
#> 9 Biggs D… 183 84 black light brown 24 male mascu…
#> 10 Obi-Wan… 182 77 auburn, w… fair blue-gray 57 male mascu…
#> # … with 77 more rows, and 5 more variables: homeworld <chr>, species <chr>,
#> # films <list>, vehicles <list>, starships <list>