用限制替换NA以前的值

qua*_*doo 6 replace r na

我想n用最新的非NA值替换向量中的NA值.

例如,如果:

a <- c(1,NA,NA,NA,NA,NA,2,NA,1,NA,NA,NA)
n <- 2
Run Code Online (Sandbox Code Playgroud)

我想获得:

c(1,1,1,NA,NA,NA,2,2,1,1,1,NA)
Run Code Online (Sandbox Code Playgroud)

n 是可由给定元素替换的NA值的最大数量).

我知道na.locf()功能,但我不知道如何设置限制n.有可能吗?

tal*_*lat 6

这是使用na.locf和的选项rle

library(zoo)
r <- rle(is.na(a))
a <- na.locf(a)
is.na(a) <- sequence(r$lengths) > n & rep(r$values, r$lengths)
a
# [1]  1  1  1 NA NA NA  2  2  1  1  1 NA
Run Code Online (Sandbox Code Playgroud)

所以在这里我首先计算元素的运行长度a(包括NA条目),然后用所有NA替换na.locf,最后将这些元素转回NA,其中运行长度大于n元素NA.