A function for replacing each NA with the most recent non-NA prior to it.

na_locf(x, first_na_value = 0, recursive = TRUE, ...)

Arguments

x

some vector

first_na_value

If the first observation is NA, fill it with "first_na_value"

recursive

logical (TRUE). Should na_locf be re-run until all NA values are filled?

...

ignored.

Value

The original vector, but with all the missing values filled by the value before them.

See also

Examples

na_locf(c(NA, NA))
#> [1] 0 0
na_locf(c(1, NA))
#> [1] 1 1
na_locf(c(1, NA, NA, NA))
#> [1] 1 1 1 1
na_locf(c(1, NA, NA, NA, 2, 2, NA, 3, NA, 4))
#>  [1] 1 1 1 1 2 2 2 3 3 4
na_locf(c(1, NA, NA, NA, 2, 2, NA, 3, NA, 4), recursive = FALSE)
#>  [1]  1  1 NA NA  2  2  2  3  3  4
if (FALSE) {

# library(microbenchmark)
# library(zoo)

# microbenchmark(
#  na_locf = na_locf(c(1, NA, NA, NA, 2, 2, NA, 3, NA, 4)),
#  na.locf = na.locf(c(1, NA, NA, NA, 2, 2, NA, 3, NA, 4))
#) # my implementation is 6 times faster :)

#microbenchmark(
#  na_locf = na_locf(rep(c(1, NA, NA, NA, 2, 2, NA, 3, NA, 4), 1000)),
#  na.locf = na.locf(rep(c(1, NA, NA, NA, 2, 2, NA, 3, NA, 4), 1000))
# ) # my implementation is 3 times faster

}