【问题标题】:How to na.locf in R without using additional packages [duplicate]如何在不使用其他软件包的情况下在 R 中使用 na.locf [重复]
【发布时间】:2013-11-07 14:42:28
【问题描述】:

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

zoo 包中的herena.locf 可以做到这一点。然而,考虑到问题的简单性,以及这将在“空白”R 环境中执行多次这一事实,我想在不加载包的情况下执行此操作。有没有办法只使用基本的 R 来简单快速地做到这一点? (向量可能很长,可能包含许多连续的 NA。)

【问题讨论】:

  • @Arun 如果是同一个问题,那么该页面上接受的答案将是此处的有效答案,但事实并非如此。
  • @AnandaMahto 如果存在某些(任何)答案对问题 A 有效,但对问题 B 无效,那么问题 A != 问题 B 是合理的。 “如何在不接触气球的情况下移动气球”不是“如何移动气球”的重复,即使他们有一些共同的答案。 (我不删除这个问题的另一个原因是,除非你有幸尝试了“传播”这个词,否则我真的很难找到这个答案,我怀疑其他人也不会。)
  • @tennenrishin,很好。但是没有理由重新打开。我没有看到有人投票删除该问题,因此,您的问题仍将作为另一个问题的路标(或结束某人的搜索,无论情况如何)。
  • @AnandaMahto,好的,谢谢。但是一个人如何“重新开放”?通过回复评论? (以及如何查看一个问题是否已结束?)

标签: r performance missing-data na


【解决方案1】:

摘自zoo::na.locf.default

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

另见here

【讨论】:

    【解决方案2】:

    这是使用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 已经包含无限则失败
    • 希望这是显而易见的。
    猜你喜欢
    • 2012-12-18
    • 2022-10-20
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多