2017-10-17 119 views

回答

6

這裏是cumsum

一個選項
i1 <- dataset <1 
tapply(dataset[!i1], cumsum(i1)[!i1], FUN = sum) 
# 1 2 3 
# 6.8 1.4 12.3 
+1

這是一個很好的! –

1

提取行程長度編碼對於那些滿足您的是標準條目> 1:

foo <- rle(dataset>1) 

現在我們需要來標記不同的運行。我們標籤值< = 1的運行爲「0」和所有那些> 1,通過增加整數:

foo$values <- as.numeric(foo$values) 
foo$values[foo$values>0] <- 1:sum(foo$values[foo$values>0]) 

我們現在backtransform這得到正確的標籤。看看index明白髮生了什麼:

index <- inverse.rle(foo) 
cbind(dataset,index) 

我們終於由不同的指標值求和值(並忽略那些指數是0,因爲這個總結是< = 1項):

by(dataset,index,sum)[-1] 

輸出:

> cbind(dataset,index) 
     dataset index 
[1,]  0.5  0 
[2,]  1.2  1 
[3,]  1.5  1 
[4,]  2.1  1 
[5,]  2.0  1 
[6,]  0.8  0 
[7,]  1.4  2 
[8,]  0.0  0 
[9,]  2.4  3 
[10,]  2.9  3 
[11,]  2.9  3 
[12,]  2.7  3 
[13,]  1.4  3 
[14,] -0.8  0 
[15,] -0.4  0 
[16,] -0.2  0 

> by(dataset,index,sum)[-1] 
index 
    1 2 3 
6.8 1.4 12.3