2016-11-17 26 views
0

我對R很新,嘗試了一些公式來形成論壇,但不知何故我無法修改它們以滿足我的條件。 我要構造一個新的開始時在列E中的變量是> = 0 cumsum:r cumsum在> 0時區分重置

NR E Proability Cumsum  
1 -.2 .2 .2 
2 -.15 .2 .4  
3 -.1 .2 .6  
4 .1 .2 .2 
5 .2 .2 .4 

最後一列應的結果。

有沒有人有想法?

非常感謝你:)

+0

列'E'只是交換否定之間的人並在您的數據的正面價值?如果是這樣,請試試'ave(df $ Proability,sign(df $ E),FUN = cumsum)'。如果您想在每次'E'改變符號時重新啓動'cumsum',請嘗試'ave(df $ Proability,cumsum(c(FALSE,sign(df $ E [-1])!= sign(df $ E [ -nrow(DF)]))),FUN = cumsum)'。 – nicola

+0

非常感謝尼古拉! – Max

回答

1

有一個在data.table包,你可以利用的分組稱爲rleid一個非常有用的功能。我會結合一些基本的功能,使用它:

library(data.table) 
df <- transform(df, cumsum2 = ave(Proability, rleid(E > 0), FUN = cumsum)) 

或者,如果你想充分利用data.table功能,這將是

setDT(df) 
df[, cumsum2 := cumsum(Proability), by = rleid(E > 0)] 
setDF(df) # optional 
+0

謝謝。但是,使用第一個函數時,它會再次將概率函數作爲列發出? – Max

+0

它運行正常,當我運行它 –