最后一次观察向前添加

经过一些搜索和滚动后,第一个问题在这里我仍然卡住了

我有一个应该始终增加的大向量,但它有时会重置为 0。我希望每次重置为 0 时,先前的非 0 值都会添加到以下值中。我试过 LOCF 但它不起作用,因为它只用以前的值填充我的 0 值,然后返回到最低值。

向量示例:

数据 期望的转变
0 0
0 0
1 1
2 2
3 3
5 5
6 6
0 6
0 6
1 7
2 8

回答

也许你可以试试cumsum+rle像下面

v <- df$Data
idx <- with(
  rle(v == 0),
  cumsum(lengths)[values] - 1
)
df$DataOut <- v + cumsum(replace(rep(0, length(v)), idx, v[pmax(1, idx - 1)]))

这使

> df
# A tibble: 11 x 2
    Data DataOut
   <dbl>   <dbl>
 1     0       0
 2     0       0
 3     1       1
 4     2       2
 5     3       3
 6     5       5
 7     6       6
 8     0       6
 9     0       6
10     1       7
11     2       8


以上是最后一次观察向前添加的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>