R 数据框中的投影

问题描述 投票:0回答:1

我有一个 R 数据框,其中包含一年的年份、增长率和总计。我想通过使用 Growth_rate 进行折扣来填充缺失值,该增长率随着几年后的增加和之前几年的减少而增加。 例如,如果年份为 2018 年,则 2019 年的值为 2018 年的值乘以 2018 年增长率,2020 年的值为 2018 年的值乘以 2018 年增长率和 2019 年的 Growth_rate 值。反之,2017 年的值,将是 2018 年的价值按 grotwh_rate 进行折扣2017 年,2016 年的值将是 2018 年的值按 2017 年的 grotwh_rate 和 2016 年的 Growth_rate 进行折扣。下面是示例数据框,所需列为 Total_Projection

# Example dataset
df <- data.frame(
  year = c(2016, 2017, 2018, 2019, 2021, 2022, 2023),
  growth_rate = c(0.0678912, 0.0526389, 0.099030, 0.830844, 0.830764, 0.656793, 1.253578),
  total = c(NA, NA, 1141262, NA, NA, NA, NA),
  total_projection = c(1139887, 1140661, 1141262, 1142392, 1151884, 1161453, 1169081)
)
r dplyr
1个回答
0
投票
df |>
  mutate(coef = cumprod(1+lag(growth_rate, 1, 0)/100), 
         total2 = coef / coef[year == 2018] * total[year == 2018])

结果

  year growth_rate   total total_projection     coef  total2
1 2016   0.0678912      NA          1139887 1.000000 1139888
2 2017   0.0526389      NA          1140661 1.000679 1140662
3 2018   0.0990300 1141262          1141262 1.001206 1141262
4 2019   0.8308440      NA          1142392 1.002197 1142392
5 2021   0.8307640      NA          1151884 1.010524 1151884
6 2022   0.6567930      NA          1161453 1.018919 1161453
7 2023   1.2535780      NA          1169081 1.025611 1169081
© www.soinside.com 2019 - 2024. All rights reserved.