我對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
最後一列應的結果。
有沒有人有想法?
非常感謝你:)
我對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
最後一列應的結果。
有沒有人有想法?
非常感謝你:)
有一個在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
謝謝。但是,使用第一個函數時,它會再次將概率函數作爲列發出? – Max
它運行正常,當我運行它 –
列'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
非常感謝尼古拉! – Max