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

如何在R数据框中不使用循环从增长率还原序列?

从增长率还原序列的无循环实现方法

首先从给定的增长率公式反推序列x的计算逻辑:

原公式:

growth_rate_t = 400 * (ln(x_t) - ln(x_{t-1}))

对公式变形推导:

  1. 两边除以400:ln(x_t) - ln(x_{t-1}) = growth_rate_t / 400
  2. 利用对数性质合并:ln(x_t / x_{t-1}) = growth_rate_t / 400
  3. 两边取指数得到比值:x_t / x_{t-1} = exp(growth_rate_t / 400)
  4. 最终得到递推式:x_t = x_{t-1} * exp(growth_rate_t / 400)

基于这个递推式,我们可以用R的**累积乘积函数cumprod()**实现无循环计算,步骤如下:

代码实现

  1. 先构造示例数据框:
df <- data.frame(
  date = as.Date(c("1946-10-01", "1947-01-01", "1947-04-01", "1947-07-01")),
  growth_rate = c(NA, 3.5, 2.1, 1.6)
)
  1. 计算增长率对应的指数因子,生成累积乘积后乘以初始值100:
# 第一个位置设为1(初始x无需乘任何因子)
factors <- c(1, exp(df$growth_rate[-1] / 400))
# 计算累积乘积并乘以初始值100,保留两位小数
df$x <- round(100 * cumprod(factors), 2)

运行后查看结果:

print(df)
#         date growth_rate      x
# 1 1946-10-01          NA 100.00
# 2 1947-01-01         3.5 100.88
# 3 1947-04-01         2.1 101.41
# 4 1947-07-01         1.6 101.82

结果完全符合预期,整个过程无需循环,借助cumprod()高效完成累积计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:40:30