用先前的值替换NA,并限制连续NA的数量

人气:921 发布:2022-10-16 标签: replace r na

问题描述

我要用最新的非NA值替换向量中最多n个连续的NA值。

例如,如果:

a <- c(1,NA,NA,NA,NA,NA,2,NA,1,NA,NA,NA)
n <- 2

我希望获得:

c(1,1,1,NA,NA,NA,2,2,1,1,1,NA)

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

我知道na.locf()函数,但我不知道如何设置限制n。可以做这件事吗?

推荐答案

这里有一个使用na.locfrle

的选项
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

所以在这里,我首先计算a中元素的游程长度(包括NA条目),然后使用na.locf替换所有NA,最后将这些元素返回到游程长度大于n且元素为NA的NA。

932