我正在尝试根据以下条件计算具有元素 0,1,NA 的向量的累积和:
1)只需计算 NA 值之间的 cumsums
2)如果 0 出现在 1 之后,那么我想要 cumsum+1
Out 是原始向量:
out[1:100]
[1] NA NA NA NA 0 1 1 NA NA NA 1 NA 0 NA 0 1 NA NA 0 NA 0 1 0 0 0 NA 0 1 0 1 0 0 1 0 1 1 0 0 0 0
[41] 1 0 NA 0 0 NA 1 NA 0 1 NA 0 NA 0 1 1 NA 1 NA 0 0 0 1 1 NA NA NA 0 0 NA 0 0 0 1 0 NA 1 0 NA 0
[81] 1 1 0 1 1 0 1 0 NA 0 1 0 1 0 NA 0 1 0 0 1
我使用此代码来计算 NA 值之间的累积和:
g <- cumsum(is.na(head(c(0, out), -1)))
out1 <- ave(out, g, FUN = cumsum)
我明白了
out1[1:100]
[1] NA NA NA NA 0 1 2 NA NA NA 1 NA 0 NA 0 1 NA NA 0 NA 0 1 1 1 1 NA 0 1 1 2 2 2 3 3 4 5 5 5 5 5
[41] 6 6 NA 0 0 NA 1 NA 0 1 NA 0 NA 0 1 2 NA 1 NA 0 0 0 1 2 NA NA NA 0 0 NA 0 0 0 1 1 NA 1 1 NA 0
[81] 1 2 2 3 4 4 5 5 NA 0 1 1 2 2 NA 0 1 1 1 2
现在我有一个问题,如果 1 后面跟着一个零(这里只是第一个零),我想得到 cumsum+1
例如
0 1 1 0 0 0 1 0 1 1 不适用
有了我现在拥有的功能,我会得到
0 1 2 2 2 2 3 3 4 5 NA,但我想要的是:
0 1 2 3 3 3 4 5 6 7 不适用
有人可以帮忙吗?谢谢你。