【问题标题】:Cumulative sum with conditional subtraction using dplyr使用 dplyr 进行条件减法的累积和
【发布时间】:2017-08-10 21:13:42
【问题描述】:

我正在尝试使用 R 中的 dplyr 包计算条件累积和。我正在构建一个带有负冲击的储蓄计算器。所以我想要一个具有累积储蓄的变量,减去冲击。这似乎使用 lag 函数应该相当简单,但我似乎无法让它工作。

这是一个例子:

event <- c(0,0,0,1,0) 
save <- rep(.5,5)
## add up the savings from each prior row, then when event is one subtract 1
output_want <- c(.5,1,1.5,1,1.5) 
df <- tibble(event,save,output_want) %>% 
  mutate(totsave = if_else(row_number() ==1, save, 0)) %>% 
  mutate(totsave = if_else(row_number() !=1, save+lag(totsave)-event, save))

理想情况下,我想让负储蓄冲击成为累积储蓄的一小部分,但我想我会从一个更简单的案例开始。

【问题讨论】:

    标签: r dplyr cumulative-sum


    【解决方案1】:

    如果在每个时间步,您想从 save 向量中添加节省,但从 event 中减去冲击,那么您可以通过获取 save-event 的累积和来计算所需的结果:

    cumsum(save-event)
    # [1] 0.5 1.0 1.5 1.0 1.5
    

    【讨论】:

    • 谢谢。这很好用。我也可以像cumsum(save-event*0.5*cumsum(save))那样减去累积总和的一小部分你知道为什么我最初使用的滞后函数不起作用吗?
    • @williamlief 你的lag 版本并没有累积起来,所以我看不出它如何能将一个时期的节省加起来。
    猜你喜欢
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 2019-03-28
    • 1970-01-01
    • 2022-07-24
    • 2018-04-05
    相关资源
    最近更新 更多