次の条件に基づいて、要素 0,1,NA を持つベクトルの累積和を計算しようとしています。
1)NA値の間の累積を計算するだけです
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 該当なし
誰でも助けることができますか?ありがとうございました。