如何在R中使用na.locf而不使用其他包
给定一个向量,如(假设)如何在R中使用na.locf而不使用其他包,r,performance,missing-data,na,R,Performance,Missing Data,Na,给定一个向量,如(假设)c(2,NA,5,NA,NA,1,NA),问题是“上一次观测结转”导致向量c(2,2,5,5,5,1,1) 正如所回答的,zoo软件包中的na.locf可以做到这一点。然而,考虑到问题的简单性,以及在一个“空白”R环境中执行多次的事实,我希望在不加载包的情况下执行此操作。有没有一种方法可以简单而快速地使用基本的R?(向量可能很长,并且可能包含许多连续的NAs。)这是使用rle的一种方法: x <- c(2,NA,5,NA,NA,1,NA) x[is.na(x)]
c(2,NA,5,NA,NA,1,NA)
,问题是“上一次观测结转”导致向量c(2,2,5,5,5,1,1)
正如所回答的,
zoo
软件包中的na.locf
可以做到这一点。然而,考虑到问题的简单性,以及在一个“空白”R环境中执行多次的事实,我希望在不加载包的情况下执行此操作。有没有一种方法可以简单而快速地使用基本的R?(向量可能很长,并且可能包含许多连续的NAs。)这是使用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
x这是使用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
x摘自zoo::na.locf.default
fillInTheBlanks <- function(S) {
L <- !is.na(S)
c(S[L][1], S[L])[cumsum(L)+1]
}
填充空格从zoo::na.locf.default提取
fillInTheBlanks <- function(S) {
L <- !is.na(S)
c(S[L][1], S[L])[cumsum(L)+1]
}
填空检查@Arun如果是同一个问题,那么该页面上接受的答案在这里应该是有效的答案,而不是。@AnandaMahto如果存在对问题a有效但对问题B无效的(任何)答案,那么问题a就是合理的!=问题B。“如何在不接触气球的情况下移动气球”并不是“如何移动气球”的翻版,即使他们有一些共同的答案。(我不删除这个问题的另一个原因是,除非你有幸尝试“传播”这个词,否则很难找到答案,而我不是,我怀疑其他人也不会)。但没有理由重新开放。我没有看到有人投票删除这个问题,因此,你的问题仍然会成为另一个问题的路标(或者结束某人的搜索,不管是什么情况)。@AnandaMahto,好的,谢谢。但如何“重开”?通过回复评论?(如何判断一个问题是否已结束?)检查这个@Arun如果是同一个问题,那么该页面上被接受的答案应该是一个有效的答案,而事实并非如此。@AnandaMahto如果存在对问题a有效但对问题B无效的(任何)答案,那么问题a就是合理的!=问题B。“如何在不接触气球的情况下移动气球”并不是“如何移动气球”的翻版,即使他们有一些共同的答案。(我不删除这个问题的另一个原因是,除非你有幸尝试“传播”这个词,否则很难找到答案,而我不是,我怀疑其他人也不会)。但没有理由重新开放。我没有看到有人投票删除这个问题,因此,你的问题仍然会成为另一个问题的路标(或者结束某人的搜索,不管是什么情况)。@AnandaMahto,好的,谢谢。但如何“重开”?通过回复评论?(人们如何判断一个问题是否已结束?)如果x
已经包含了无限操作,这是显而易见的。如果x
已经包含了无限操作,这是显而易见的,这将失败。