Given a set of vectors, coalesce()
finds the first non-missing value at
each position. It's inspired by the SQL COALESCE
function which does the
same thing for SQL NULL
s.
coalesce(..., .ptype = NULL, .size = NULL)
One or more vectors. These will be recycled against each other, and will be cast to their common type.
An optional prototype declaring the desired output type. If
supplied, this overrides the common type of the vectors in ...
.
An optional size declaring the desired output size. If supplied,
this overrides the common size of the vectors in ...
.
A vector with the same type and size as the common type and common
size of the vectors in ...
.
na_if()
to replace specified values with an NA
.
tidyr::replace_na()
to replace NA
with a value.
# Use a single value to replace all missing values
x <- sample(c(1:5, NA, NA, NA))
coalesce(x, 0L)
#> [1] 2 3 4 0 0 0 5 1
# The equivalent to a missing value in a list is `NULL`
coalesce(list(1, 2, NULL), list(NA))
#> [[1]]
#> [1] 1
#>
#> [[2]]
#> [1] 2
#>
#> [[3]]
#> [1] NA
#>
# Or generate a complete vector from partially missing pieces
y <- c(1, 2, NA, NA, 5)
z <- c(NA, NA, 3, 4, 5)
coalesce(y, z)
#> [1] 1 2 3 4 5
# Supply lists by splicing them into dots:
vecs <- list(
c(1, 2, NA, NA, 5),
c(NA, NA, 3, 4, 5)
)
coalesce(!!!vecs)
#> [1] 1 2 3 4 5