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

如何在R中设置1999年为索引分析的自定义基准年?

调整基准年为1999年的索引计算方案

你的核心需求是将各分析单元的索引基准从1997年改为1999年(基准值100),本质是计算各年份数据相对1999年数据的比例倍数。原代码的cumprod逻辑存在偏差,更直接的方法是基于基准年数据的比值计算索引,步骤如下:

修改后的完整代码

library(tidyverse)
df <- data.frame(case = c("USA", "USA_synth", "CAN", "CAN_synth"),
                 country = c(1, 1, 2, 2),
                 synth = c(0, 1, 0, 1),
                 "1997" = c(1, 1, 0.75, 0.75),
                 "1998" = c(1.1, 1.1, 0.9, 0.9),
                 "1999" = c(1.2, 1.2, 1, 1),
                 "2000" = c(1.3, 1.3, 1.1, 1.1),
                 "2001" = c(1.3, 1.5, 1.1, 1.5),
                 "2002" = c(1.5, 1.6, 1.3, 1.6),
                 "2003" = c(1.7, 1.7, 1.7, 1.7)
                 )
df <- pivot_longer(df, cols=4:10, names_to = "year", values_to = "data")
# 优化year列转换:转为数值型更方便筛选分析
df$year <- as.numeric(df$year)
df$country <- as.factor(df$country)
df$synth <- as.factor(df$synth)

# 核心修改:按case分组,以1999年数据为基准计算索引
df <- df %>%
  group_by(case) %>%
  mutate(
    # 获取当前case下1999年的原始数据值
    base_1999 = data[year == 1999],
    # 计算索引:(当前年份数据 / 1999年数据) * 100
    idx_vlue = (data / base_1999) * 100
  ) %>%
  ungroup()  # 按需取消分组

关键说明

  1. 基准值获取:通过data[year == 1999]在每个case分组内提取1999年的原始数据,确保每个分析单元都用自身的1999年数据作为基准。
  2. 索引计算逻辑:(data / base_1999) * 100直接得到相对1999年的比例,1999年的索引自然为100,前后年份的趋势对比不受影响,完全匹配你关注趋势而非绝对数值的需求。
  3. year列优化:转为数值型比因子型更方便后续筛选、排序等操作,避免原代码中重复赋值的冗余问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:18:27