3

次の条件に基づいて、要素 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 該当なし

誰でも助けることができますか?ありがとうございました。

4

2 に答える 2