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

R语言用if/else循环实现多列金额按通胀年金化折算为2021年现值

R语言通胀折算到2021年现值实现方案

首先你需要先整理好2014到2021年每一年的同比通胀率数据,以下代码中我先使用示例通胀率匹配你给出的计算逻辑,实际使用时替换为真实通胀数值即可。

# 第一步:构造各年到2021年的累计通胀乘数表
inflation_rate <- list(
  "2014_2015" = 0.025,
  "2015_2016" = 0.018,
  "2016_2017" = 0.032,
  "2017_2018" = 0.021,
  "2018_2019" = 0.024,
  "2019_2020" = 0.012,
  "2020_2021" = 0.017
)

# 预计算每个交易年份对应的累计乘数(即该年到2021年所有(1+通胀率)的乘积)
year_multiplier <- data.frame(
  year = c(2014,2015,2016,2017,2018,2019,2020,2021),
  multiplier = c(
    prod(1+unlist(inflation_rate)),
    prod(1+unlist(inflation_rate[2:7])),
    prod(1+unlist(inflation_rate[3:7])),
    prod(1+unlist(inflation_rate[4:7])),
    prod(1+unlist(inflation_rate[5:7])),
    prod(1+unlist(inflation_rate[6:7])),
    1+inflation_rate[["2020_2021"]],
    1
  )
)

方法1:if/else循环实现(符合你要求的实现形式)

# 复制原始数据集
annuitized_dollar <- dollar
# 定义需要折算的成本列
cost_cols <- c("variable_costs", "direct_costs", "total_costs")

# 逐行循环处理
for(i in 1:nrow(annuitized_dollar)){
  current_year <- annuitized_dollar$year[i]
  # if/else判断对应年份的折算乘数
  if(current_year == 2014){
    mult <- year_multiplier$multiplier[year_multiplier$year == 2014]
  } else if(current_year == 2015){
    mult <- year_multiplier$multiplier[year_multiplier$year == 2015]
  } else if(current_year == 2016){
    mult <- year_multiplier$multiplier[year_multiplier$year == 2016]
  } else if(current_year == 2017){
    mult <- year_multiplier$multiplier[year_multiplier$year == 2017]
  } else if(current_year == 2018){
    mult <- year_multiplier$multiplier[year_multiplier$year == 2018]
  } else if(current_year == 2019){
    mult <- year_multiplier$multiplier[year_multiplier$year == 2019]
  } else if(current_year == 2020){
    mult <- year_multiplier$multiplier[year_multiplier$year == 2020]
  } else {
    mult <- 1
  }
  # 所有成本列乘对应乘数,round保留整数和你示例输出格式一致
  annuitized_dollar[i, cost_cols] <- round(annuitized_dollar[i, cost_cols] * mult, 0)
}

# 重命名列加_2021后缀,删除不需要的列得到最终结果
colnames(annuitized_dollar)[colnames(annuitized_dollar) %in% cost_cols] <- paste0(cost_cols, "_2021")
annuitized_dollar <- annuitized_dollar[, paste0(cost_cols, "_2021")]

方法2:更简洁的向量化实现(可选,6700行数据运算效率更高)

library(dplyr)
annuitized_dollar <- dollar %>%
  left_join(year_multiplier, by = "year") %>%
  mutate(
    variable_costs_2021 = round(variable_costs * multiplier, 0),
    direct_costs_2021 = round(direct_costs * multiplier, 0),
    total_costs_2021 = round(total_costs * multiplier, 0)
  ) %>%
  select(variable_costs_2021, direct_costs_2021, total_costs_2021)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:45:03