You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用tidyverse/mutate计算存款账户余额,适配零投资场景

问题分析与解决方案

原代码的核心问题在于复利计算逻辑错误,具体表现为:

  • 在rowwise()环境下使用cumsum(planned_investments)会计算整个列的累积和,而非当前年份及之前的投入累积,导致每笔投入的复利次数匹配错误
  • 投入资金的复利幂次计算逻辑偏差,错误地将累积投入乘以递减的高次幂,导致后续无投入年份的余额计算异常

正确实现方案(适配无投入场景)

使用tidyverse中的purrr::accumulate函数实现逐期余额计算,无需循环,且完美适配计划投入为0的场景:

library(tidyverse)

initial_investment <- 22950
rate <- 0.015 

overview_invests <- tibble(id = 1:25, planned_investments = c(rep(1000, 20), rep(0,5))) %>%
  mutate(
    # 逐期计算年末余额:上一年余额 + 当年投入 → 年末计息
    balance = accumulate(planned_investments,
                         .init = initial_investment,
                         ~ (.x + .y) * (1 + rate))[-1]
  )

逻辑说明

  1. accumulate以初始存款initial_investment为起始值,逐行处理planned_investments
  2. 每一期的计算规则:
    • 上一年的账户余额 + 当年的计划投入
    • 对上述总额按年利率计算年末利息,得到当期年末余额
  3. [-1]用于移除初始的initial_investment值,确保余额序列与年份一一对应

当后续年份计划投入为0时,计算逻辑自动退化为上一年余额复利增长,完全符合实际存款计息规则。

内容的提问来源于stack exchange,提问作者Junk Natalia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:45:03