2012-07-18 38 views
0

我有一個簡單的二進制向量a,我嘗試使用R函數cumsum將其轉換爲向量b。但是,cumsum並不完全返回向量b將cumsum應用於二進制向量

下面是一個例子:

a <- c(1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,1) 

b <- c(1,2,2,2,3,4,5,6,7,7,8,9,9,9,10,11) 

> cumsum(a) 
[1] 1 1 1 1 2 3 4 5 5 5 6 6 6 6 7 8 

的問題是,無論何時一個0出現在向量a然後先前的數量應但只適用於第一0被增加1所述的剩餘的被賦予相同的值。

任何建議將是偉大的! :-)

回答

3

的技巧是使用diff標記的轉換:

cumsum(as.logical(a+c(0,abs(diff(a))))) 
[1] 1 2 2 2 3 4 5 6 7 7 8 9 9 9 10 11 
+0

不知道我是否會迄今得到,P,但是非常感謝的代碼,偉大的和平! :-) – user969113 2012-07-18 09:09:54