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

如何在R DataFrame中基于growth_rate推算缺失的total值(含负增长率)

基于增长率推算缺失值的R实现

我有一个包含year、growth_rate和total列的R DataFrame,其中仅单个年份的total字段有有效值,其余均为NA。需要通过growth_rate字段推算所有缺失的total值,规则如下:

  • 已知年份之后的年份:从已知值开始,逐年累计乘以对应年份的growth_rate进行递增计算(例如已知2018年的total,2019年值为2018年total × 2018年growth_rate,2020年值为2018年total × 2018年growth_rate × 2019年growth_rate)
  • 已知年份之前的年份:从已知值开始,逐年除以对应年份的growth_rate进行折现计算(例如已知2018年的total,2017年值为2018年total ÷ 2017年growth_rate,2016年值为2018年total ÷ 2017年growth_rate ÷ 2016年growth_rate)

本次需求需支持负增长率场景,示例数据集及目标结果字段total_projection如下:

# 示例数据集
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, 1132901, 1142312, 1134810)
)

解决方案代码

以下是实现该逻辑的R代码,支持任意单个已知年份、负增长率及非连续年份的场景:

library(dplyr)
library(tidyr)

# 定位已知total值的年份和对应数值
known_year <- df$year[!is.na(df$total)]
known_total <- df$total[!is.na(df$total)]

# 按年份排序,保证计算顺序正确
df_sorted <- df %>% arrange(year)

# 计算增长/折现因子及累计乘积
df_sorted <- df_sorted %>%
  mutate(
    is_known = year == known_year,
    # 分场景定义因子:已知年份前用1/增长率(折现),之后用增长率(增长),当前为1
    growth_factor = case_when(
      year < known_year ~ 1 / growth_rate,
      year == known_year ~ 1,
      year > known_year ~ growth_rate
    ),
    # 从已知年份向前后扩散计算累计因子
    cum_growth = ifelse(is_known, 1, NA),
    cum_growth = ifelse(year > known_year, cumprod(growth_factor), cum_growth),
    cum_growth = ifelse(year < known_year, rev(cumprod(rev(growth_factor))), cum_growth)
  )

# 生成推算结果并恢复原始数据顺序
df_result <- df_sorted %>%
  mutate(total_projection = known_total * cum_growth) %>%
  select(year, growth_rate, total, total_projection) %>%
  arrange(match(year, df$year))

# 查看结果
print(df_result)
代码说明
  • 首先定位唯一的已知total值及其年份,确保逻辑适配单已知值场景
  • 对数据按年份排序,避免非连续年份导致的计算顺序错误
  • 通过case_when()分别定义折现因子(已知年份前)和增长因子(已知年份后)
  • 利用cumprod()和反向累计乘积,从已知年份向前后扩散计算累计因子
  • 最后用已知total值乘以累计因子得到推算结果,并恢复原始数据的年份顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:55:00