带有滞后和 ifelse 的滚动计算

问题描述

我正在尝试计算数据框中某列的累积总和,但我只想根据条件来完成。

我对 R 非常陌生,并尝试在 R 中转换下面的这个 spss 代码,以根据 lca 是否与上面的行相同,然后添加健康网络,使用名为累积的新列来实现下面的数据框成本到上面的累计成本。

spss code:
IF LAG(LCA) NE LCA cumulative=health_net_cost.
IF LAG(LCA)=LCA cumulative=LAG(cumulative)+health_net_cost.
EXECUTE.

R 中的数据框

Lca health_net_cost   cummulative
10  100         100     
10  200         300
10  300         600
28  400         1000
28  100         1100
8   100         1200
8   200         1400
8   300         1700

解决方法

这可能是您寻找问题的解决方案。 使用 cumsum 函数。

df <- data.frame("LCA" = c(10,10,28,8,8),"Health_Net_Cost" = c(100,200,300,400,100,300))
df

输出:

LCA Health_Net_Cost
10            100
10            200
10            300
28            400
28            100
 8            100
 8            200
 8            300

运行:

cum_df <- df%>%group_by(LCA)%>%mutate(Cumulative=cumsum(Health_Net_Cost))
cum_df

您的预期输出:

LCA Health_Net_Cost Cumulative
10             100        100
10             200        300
10             300        600
28             400        400
28             100        500
 8             100        100
 8             200        300
 8             300        600
,

编辑

如果您希望按 LCA分组的累积总和,这可能会有所帮助:

install.packages("dplyr")
library(dplyr)
df %>%
  group_by(LCA) %>%
  mutate("cumulative" = cumsum(Health_Net_Cost))
# A tibble: 8 x 3
# Groups:   LCA [3]
    LCA Health_Net_Cost cumulative
  <dbl>           <dbl>      <dbl>
1    10             100        100
2    10             200        300
3    10             300        600
4    28             400        400
5    28             100        500
6     8             100        100
7     8             200        300
8     8             300        600