【问题标题】:r cumsum differentiate reset at >0r cumsum 微分复位 > 0
【发布时间】:2016-11-17 13:10:21
【问题描述】:

我对 R 很陌生,并尝试了论坛中的一些公式,但不知何故我无法修改它们以满足我的条件。 当E列中的变量> = 0时,我想构造一个新的cumsum:

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

最后一列应该是结果。

有人有想法吗?

非常感谢:)

【问题讨论】:

  • Column 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)
  • 非常感谢尼古拉!!

标签: r cumsum


【解决方案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

【讨论】:

  • 谢谢。但是,对于您的第一个函数,它再次将概率函数作为一列给出?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多