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

基于年度增长率的DataFrame前后向值推演实现问题

问题需求

我有一个包含不同年份年度增长量(原描述的annual growth values实际为年度增长量)和某一特定年份已知值的DataFrame,需要基于该已知值:

  • 对该年份之前的年份进行反向递减推演
  • 对该年份之后的年份进行正向递增推演

示例数据集

ex_df = structure(list(year = c(2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025), 
                    growth = c(1152, -2051, 1074, 1200, 1036, 1593, 1007, 1701, 1642, -1800, 1607), 
                    value = c(NA, NA, NA, NA, NA, NA, NA, 11278, NA, NA, NA), 
                    new_value = c(5874, 7026, 4975, 6049, 7642, 8678, 10271, 11278, 12979, 14621, 12821)), 
               class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -11L))

其中:

  • growth列表示当前年份到下一年的增长量(例如2022年的growth=1701,对应2022到2023年的数值增长1701)
  • value列仅在2022年有已知值11278
  • new_value列是预期得到的推演结果

尝试的代码

ex_df %>%
  arrange(year) |>
  mutate(cum_yr_increase = cumsum(growth), 
         new_value_2 = cum_yr_increase + value[year == 2024])

问题分析

这段代码存在两个关键错误:

  1. 基准年份选取错误:已知值在2022年,但代码中引用了value[year == 2024](该值为NA)
  2. 累积逻辑错误:cumsum(growth)是对所有年份的增长量做全局累加,无法区分正向/反向的推演逻辑,不符合需求

正确解决方案

我们可以利用purrr::accumulate分别处理正向(基准年后)和反向(基准年前)的推演,再合并结果:

library(dplyr)
library(purrr)

# 定义基准年份和对应的已知值
base_year <- 2022
base_value <- ex_df$value[ex_df$year == base_year]

# 执行推演计算
ex_df_processed <- ex_df %>%
  arrange(year) %>%
  # 正向推演:基准年之后的年份,每个年份值 = 上一年值 + 上一年的增长量
  mutate(new_value_forward = accumulate(
    .x = growth,
    .f = ~ .x + .y,
    .init = base_value
  )[-1]) %>% # 去掉初始的基准值,保留2023-2025的结果
  # 反向推演:基准年之前的年份,每个年份值 = 下一年值 - 当前年份的增长量
  mutate(new_value_backward = accumulate(
    .x = rev(growth[year < base_year]),
    .f = ~ .x - .y,
    .init = base_value
  )[-1] %>% rev()) %>% # 反转结果,匹配2015-2021的顺序
  # 合并正向、反向和基准年的结果
  mutate(new_value_correct = case_when(
    year == base_year ~ base_value,
    year > base_year ~ new_value_forward,
    year < base_year ~ new_value_backward
  )) %>%
  # 清理中间变量
  select(-new_value_forward, -new_value_backward)

# 查看结果
print(ex_df_processed)

运行后得到的new_value_correct列会和示例中的new_value完全一致,满足推演需求。


内容的提问来源于stack exchange,提问作者Stephen Okiya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:27:24