How to fill in the preceding numbers whenever there is a 0 in R?

前端 未结 5 1455
小蘑菇
小蘑菇 2021-02-13 18:19

I have a string of numbers:

n1 = c(1, 1, 0, 6, 0, 0, 10, 10, 11, 12, 0, 0, 19, 23, 0, 0)

I need to replace 0 with the corresponding number righ

5条回答
  •  不要未来只要你来
    2021-02-13 18:39

    Because rle is the answer to everything:

    #make an example including an NA value
    n1 <- c(1, 1, 0, 6, NA, 0, 10, 10, 11, 12, 0, 0, 19, 23, 0, 0)
    r <- rle(n1)
    r$values[which(r$values==0)] <- r$values[which(r$values==0)-1]
    inverse.rle(r)
    # [1]  1  1  1  6 NA NA 10 10 11 12 12 12 19 23 23 23
    

    A version that skips NAs would be:

    n1 <- c(1, 1, 0, 6, NA, 0, 10, 10, 11, 12, 0, 0, 19, 23, 0, 0)
    r <- rle(n1[!is.na(n1)])
    r$values[which(r$values==0)] <- r$values[which(r$values==0)-1]
    n1[!is.na(n1)] <- inverse.rle(r)
    n1
    # [1]  1  1  1  6 NA  6 10 10 11 12 12 12 19 23 23 23
    

提交回复
热议问题