This is a translation of the SQL command NULL_IF
. It is useful
if you want to convert an annoying value to NA
.
na_if(x, y)
x | Vector to modify |
---|---|
y | 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#> [1] 100 -100 Inf 10100 / na_if(x, 0)#> [1] 100 -100 NA 10#> [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 x 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 scoped variants of mutate # like mutate_if to mutate multiple columns starwars %>% mutate_if(is.character, list(~na_if(., "unknown")))#> # A tibble: 87 x 13 #> name height mass hair_color skin_color eye_color birth_year gender #> <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> #> 1 Luke… 172 77 blond fair blue 19 male #> 2 C-3PO 167 75 <NA> gold yellow 112 <NA> #> 3 R2-D2 96 32 <NA> white, bl… red 33 <NA> #> 4 Dart… 202 136 none white yellow 41.9 male #> 5 Leia… 150 49 brown light brown 19 female #> 6 Owen… 178 120 brown, gr… light blue 52 male #> 7 Beru… 165 75 brown light blue 47 female #> 8 R5-D4 97 32 <NA> white, red red NA <NA> #> 9 Bigg… 183 84 black light brown 24 male #> 10 Obi-… 182 77 auburn, w… fair blue-gray 57 male #> # … with 77 more rows, and 5 more variables: homeworld <chr>, species <chr>, #> # films <list>, vehicles <list>, starships <list>