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

如何基于各分组的滞后值应用公式完成分组变量预测计算

你的原有代码采用的是R默认的向量化并行计算逻辑,赋值给forecast_gdp全组首行值后,后续计算是直接把所有位置的首行值同时乘以(1+cagr),并不会迭代引用上一行刚生成的forecast_gdp结果,所以无法得到累积计算的滞后投影值。

使用tidyverse生态的purrr::accumulate函数实现迭代累积计算即可达到预期效果,完整可运行代码如下:

library(tidyverse)

# 创建示例数据
year <- c(2016:2020, 2016:2020, 2016:2020)
group <- as.character(c(rep(c("A", "B", "C"), c(5,5,5))))
gdp <- as.numeric(c(100,0,0,0,0,100,0,0,0,0,100,0,0,0,0))
cagr <- c(rep(c(0.3, 0.6, 0.9), c(5,5,5)))

df <- data.frame(year, group, gdp, cagr)

# 修改后计算逻辑
df <- df %>%
  group_by(group) %>%
  mutate(forecast_gdp = accumulate(
    .x = cagr,
    .f = ~ .x * (1 + .y), 
    .init = first(gdp)
  ) %>% tail(-1))

代码说明

  • accumulate函数会按顺序迭代处理.x传入的向量,每一步的计算结果会作为下一次迭代的第一个参数(代码中的.x)
  • .init参数指定迭代初始值为分组的首行gdp值,因为初始值会额外占一位结果,所以用tail(-1)去掉多余的初始值,保证输出长度和分组行数一致
  • 该写法也兼容同分组内每年cagr不同的场景,不需要修改逻辑

如果偏好base R写法,可以用Reduce实现相同效果,核心逻辑一致:

df <- df %>%
  group_by(group) %>%
  mutate(forecast_gdp = Reduce(
    f = function(prev, curr) prev*(1+curr),
    x = cagr,
    init = first(gdp),
    accumulate = TRUE
  )[-1])

内容的提问来源于stack exchange,提问作者Andres Gonzalez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 08:27:04