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

在R中按条件新增行与值:结合实际值与增长率生成年度数据

R实现季度实际值结合年度增长率生成年度序列的方法

你可以直接用tidyverse套件实现需求,逻辑支持后续新增预测年份,仅需更新增长率表即可,无需调整处理代码。

完整实现代码

# 加载依赖包
library(tidyverse)

# 你的示例数据
df_actuals <- tibble(year=c(2018, 2018, 2018, 2018, 2019, 2019, 2019, 2019, 2020),
                     quarter=c(1, 2, 3, 4, 1, 2, 3, 4, 1),
                     value=c(10, 12, 10, 8, 9, 17, 11, 14, 15)
)

df_projections <- tibble(year=c(2018, 2019, 2020, 2021),
                         annual_growth=c(.026, .031, .017, .019))

# 第一步:按年聚合季度实际值,统计季度数和年度实际均值
df_annual_actual <- df_actuals %>%
  group_by(year) %>%
  summarise(
    n_quarters = n(),
    actual_annual = mean(value, na.rm = TRUE)
  )

# 第二步:关联增长率表,计算最终年度值
df_result <- df_projections %>%
  left_join(df_annual_actual, by = "year") %>%
  arrange(year) %>%
  mutate(
    value = pmap_dbl(
      list(year, n_quarters, actual_annual, annual_growth),
      function(cur_year, q_cnt, actual_val, growth) {
        # 当年有完整4个季度数据,直接用实际均值
        if (!is.na(q_cnt) && q_cnt == 4) return(actual_val)
        # 找到上一个有完整实际数据的年份作为基准
        last_full_year <- df_annual_actual %>%
          filter(n_quarters == 4, year < cur_year) %>%
          arrange(desc(year)) %>%
          slice(1)
        # 计算基准年到当前年的累积增长率乘积
        cum_growth <- df_projections %>%
          filter(year > last_full_year$year, year <= cur_year) %>%
          pull(annual_growth) %>%
          `+`(1) %>%
          prod()
        # 返回推算值
        return(last_full_year$actual_annual * cum_growth)
      }
    ),
    value = round(value, 2)
  ) %>%
  select(year, value)

输出结果

> df_result
# A tibble: 4 × 2
   year value
  <dbl> <dbl>
1  2018 10.00
2  2019 12.75
3  2020 12.97
4  2021 13.21

扩展性说明

如果需要新增2022、2023等后续年份的预测,仅需要在df_projections表中新增对应年份的year和annual_growth记录即可,处理逻辑无需调整。如果后续更新季度实际数据,某年度凑齐4个季度后,代码会自动切换为使用该年度的实际均值,不需要手动修改推算逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:30:00