代码之家  ›  专栏  ›  技术社区  ›  Roman

从上一个非NA值获取索引

  •  2
  • Roman  · 技术社区  · 7 年前

    我有这个向量

    set.seed(234)
    x <- sample(c(rep(NA,3),1:5))
    x
    [1]  3  5 NA  1  4 NA NA  2
    

    对于每一个 NA ,我想要最后一个前面的非- 不适用 价值。这是第一次 ,上一个非- 不适用 有索引2。接下来的两个 ,上一个非- 索引5:

    [1]  NA  NA 2  NA  NA 5 5  NA
    

    底座 R tidyverse 没关系。我尝试了 lag , lead , rle , gl 和; coalesce 但都没有成功。例如,这是非常接近,但仍然是错误的。

    a <- rle(is.na(x))
    rep(1:length(a$lengths), a$lengths)
    [1] 1 1 2 3 3 4 4 5
    
    2 回复  |  直到 7 年前
        1
  •  6
  •   Rui Barradas    7 年前

    使用基地R

    y=1:length(x)
    y[is.na(x)]=0
    y=cummax(y)
    y[!is.na(x)]=NA
    
    y
    [1] NA NA  2 NA NA  5  5 NA
    

    从…挤到一行 Henrik

    replace(cummax(seq_along(x) * !is.na(x)), !is.na(x), NA)
    
        2
  •  0
  •   jasbner    7 年前

    下面是一种获取 tidyr 功能 fill

    library(tidyr)
    fill(as.data.frame(x),x)[is.na(x),]
    #[1] 5 4 4