3

こんにちは、これはここで尋ねられた質問の拡張です: 条件付き累積合計

次のベクトルがあるとします。ゼロ内のブロックの現在の合計を計算したいと思います。

d <- c(0,0,0,1,3,4,5,-1,2,3,-5,8,0,0,-2,-3,3,5,0,0,0,-1,-1,-1,-1);

Ans d <- c(0,0,0,1,4,8,13,12,14,17,12,20,0,0,-2,-5,-2,3,0,0,0,-1,-2,-3,-4).

私のベクトルはかなり大きいので、ベクトル化された方法でそれを行いたいと思います。これまでのところ、これを達成するために rle を使用しようとしましたが、あまり成功していません。

どうもありがとう。

4

2 に答える 2

5

これはうまくいきます:

aux <- split(d, cumsum(d == 0))
v <- unlist(sapply(aux, cumsum))
1   2  31  32  33  34  35  36  37  38  39 310   4  51  52  53  54  55   6   7  81  82  83  84  85 
0   0   0   1   4   8  13  12  14  17  12  20   0   0  -2  -5  -2   3   0   0   0  -1  -2  -3  -4  
as.vector(v)
[1]  0  0  0  1  4  8 13 12 14 17 12 20  0  0 -2 -5 -2  3  0  0  0 -1 -2 -3 -4

ここas.vector()では、要素の数を非表示にしています。

于 2012-07-16T13:20:31.563 に答える