给定一个像(例如)c(2,NA,5,NA,NA,1,NA)
这样的向量,问题是“最后一次观察结转”导致向量c(2,2,5,5,5,1,1)
。
在回答here时,na.locf
包中的zoo
可以执行此操作。但是,考虑到问题的简单性以及从“空白”R环境多次执行此事实,我想在不加载包的情况下执行此操作。有没有办法简单快速地使用基本的R? (矢量可能很长,可能包含许多连续的NA。)
答案 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