微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有滞后和 ifelse 的滚动计算

如何解决带有滞后和 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。