【发布时间】:2015-06-21 14:11:06
【问题描述】:
我正在尝试根据以下条件计算包含元素 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 不适用,但我想要的是:
0 1 2 3 3 3 4 5 6 7 不适用
有人可以帮忙吗?谢谢。
【问题讨论】:
标签: r conditional na cumsum