2016-11-17 4 views
0

私はRにはかなり新しく、いくつかの数式をフォーラムで試しましたが、どういうわけか私の状態に合うように修正できませんでした。r cumsum differentiate reset> 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 

最後の列は結果でなければなりません: 私は、列E内の変数が> = 0のとき、新たな始まりCUMSUMを構築したいです。

アイデアはありますか?

はどうもありがとうございました:)

+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

rleidと呼ばれる非常に便利な機能を使用して、グループ化のために利用することができdata.tableパッケージにあります。私はいくつかの基本機能と組み合わせて使用​​します:

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

ありがとうございます。しかし、最初の関数では、Probability関数を再び列として出力しますか? – Max

+0

私はそれを実行すると期待どおりに動作します –

関連する問題