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

R语言data.table递推计算food(n)值问题求助

用data.table实现递推公式的解决方案

我来帮你搞定这个递推计算的问题!你需要实现food(n) = food(n-1) * xRatio.food(n)的递推逻辑,初始值是2005年的c_Crust,对吧?我给你整理了完整的可运行代码和解释:

首先先把你的数据定义补全换行(方便fread正确读取):

library(data.table)
DT <- fread("year c_Crust xRatio.c_Crust
X2005 0.01504110 NA
X2010 NA 0.9883415
X2015 NA 1.0685221
X2020 NA 1.0664189
X2025 NA 1.0348418
X2030 NA 1.0370386
X2035 NA 1.0333771
X2040 NA 1.0165511
X2045 NA 1.0010563
X2050 NA 1.0056368")

核心实现代码

这里不用写复杂循环,直接利用data.table的cumprod()(累积乘积)函数就能高效完成递推:

# 提取2005年的初始值
initial_val <- DT[year == "X2005", c_Crust]

# 计算递推结果列`res`
DT[, res := initial_val * cumprod(ifelse(is.na(xRatio.c_Crust), 1, xRatio.c_Crust))]

代码逻辑解释

  • cumprod()会自动计算向量的累积乘积,比如输入[a,b,c],输出就是[a, a*b, a*b*c],完美匹配递推的乘法逻辑
  • 2005年的xRatio.c_Crust是NA,用ifelse()把它替换成1,这样2005年的累积乘积就是1,乘初始值就等于初始值本身
  • 从2010年开始,每一步的累积乘积都是前面所有年份xRatio.c_Crust的乘积,再乘初始值就正好对应你要的递推结果

额外优化:确保年份有序

如果你的数据年份不是按时间顺序排列的,先排序再计算会更稳妥:

DT <- DT[order(year)]

运行完代码后,你就能看到DT里多了一列res,就是你需要的递推计算结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:34:24