如何在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() # 按需取消分组
关键说明
- 基准值获取:通过
data[year == 1999]在每个case分组内提取1999年的原始数据,确保每个分析单元都用自身的1999年数据作为基准。 - 索引计算逻辑:
(data / base_1999) * 100直接得到相对1999年的比例,1999年的索引自然为100,前后年份的趋势对比不受影响,完全匹配你关注趋势而非绝对数值的需求。 - year列优化:转为数值型比因子型更方便后续筛选、排序等操作,避免原代码中重复赋值的冗余问题。
内容的提问来源于stack exchange,提问作者Bene
相关产品推荐
相关产品推荐

