1

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

正如在这里回答的那样,na.locfzoo包中可以做到这一点。但是,考虑到问题的简单性,以及这将在“空白”R 环境中执行多次这一事实,我想在不加载 packages的情况下执行此操作。有没有办法只使用基本的 R 来简单快速地做到这一点?(向量可能很长,并且可能包含许多连续的 NA。)

4

2 回答 2

5

摘自zoo::na.locf.default

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

另请参见此处

于 2013-11-07T15:12:10.860 回答
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
于 2013-11-07T14:55:41.757 回答