我想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.有可能吗?
这是使用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.