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)
Arguments
x: Vector to modify
y: Value or vector to compare against. When x and y are equal, the value in x will be replaced with NA.
y is cast to the type of x before comparison.
y is recycled to the size of x before comparison. This means that y can be a vector with the same size as x, but most of the time this will be a single value.
Returns
A modified version of x that replaces any values that are equal to y with NA.
Examples
na_if(1:5,5:1)x <- c(1,-1,0,10)100/ x
100/ na_if(x,0)y <- c("abc","def","","ghi")na_if(y,"")# `na_if()` allows you to replace `NaN` with `NA`,# even though `NaN == NaN` returns `NA`z <- c(1,NaN,NA,2,NaN)na_if(z,NaN)# `na_if()` is particularly useful inside `mutate()`,# and is meant for use with vectors rather than entire data framesstarwars %>% select(name, eye_color)%>% mutate(eye_color = na_if(eye_color,"unknown"))# `na_if()` can also be used with `mutate()` and `across()`# to alter multiple columnsstarwars %>% mutate(across(where(is.character),~na_if(.,"unknown")))
See Also
coalesce() to replace missing values with a specified value.