Cumulative sum for positive numbers only

前端 未结 9 1199
梦谈多话
梦谈多话 2020-12-09 08:13

I have this vector :

x = c(1,1,1,1,1,0,1,0,0,0,1,1)

And I want to do a cumulative sum for the positive numbers only. I should have the fol

9条回答
  •  伪装坚强ぢ
    2020-12-09 08:43

    One option is

    x1 <- inverse.rle(within.list(rle(x), values[!!values] <- 
                      (cumsum(values))[!!values]))
    x[x1!=0] <- ave(x[x1!=0], x1[x1!=0], FUN=seq_along)
    x
    #[1] 1 2 3 4 5 0 1 0 0 0 1 2
    

    Or a one-line code would be

     x[x>0] <-  with(rle(x), sequence(lengths[!!values]))
     x
     #[1] 1 2 3 4 5 0 1 0 0 0 1 2
    

提交回复
热议问题