用先前的值替换NA,并限制连续NA的数量 [英] Replace NA with previous value with limit on number of consecutive NA
本文介绍了用先前的值替换NA,并限制连续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.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
所以在这里,我首先计算a
中元素的游程长度(包括NA条目),然后使用na.locf
替换所有NA,最后将这些元素返回到游程长度大于n
且元素为NA
的NA。
这篇关于用先前的值替换NA,并限制连续NA的数量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文