如何在不使用其他包的情况下在na中进行na.locf

时间:2013-11-07 14:42:28

标签: r performance missing-data na

给定一个像(例如)c(2,NA,5,NA,NA,1,NA)这样的向量,问题是“最后一次观察结转”导致向量c(2,2,5,5,5,1,1)

在回答here时,na.locf包中的zoo可以执行此操作。但是,考虑到问题的简单性以及从“空白”R环境多次执行此事实,我想在不加载包的情况下执行此操作。有没有办法简单快速地使用基本的R? (矢量可能很长,可能包含许多连续的NA。)

2 个答案:

答案 0 :(得分:4)

摘自zoo::na.locf.default

fillInTheBlanks <- function(S) {
  L <- !is.na(S)
  c(S[L][1], S[L])[cumsum(L)+1]
}

另见here

答案 1 :(得分:1)

这是使用rle的一种方式:

x <- c(2,NA,5,NA,NA,1,NA) 
x[is.na(x)] <- Inf
x[is.infinite(x)] <- with(rle(x), 
    rep(values[which(is.infinite(values)) - 1], lengths[is.infinite(values)])
)
# [1] 2 2 5 5 5 1 1