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

R语言:如何计算各层级数据相对于基准年2019的变化值

解决R语言中计算定基增长率(以2019年为基准)的问题

嗨,我来帮你搞定这个需求!你现在需要的是定基增长率——也就是各年份数据和2019基准年的比值,而不是lag()生成的环比(当年和上一年比)结果。这里有几种简单高效的实现方法:

方法一:分组后直接引用基准年数据

这是最简洁的写法,利用dplyr的分组特性,在每个level组内直接提取2019年的平均值作为分母:

library(dplyr)

# 你的原始数据框
df <- tibble(
  level = rep(c("Low", "Mid", "High"), 3),
  year = rep(c(2019, 2020, 2021), each = 3),
  average = c(1300, 2065, 2194, 2966, 4723, 5915, 4049, 5915, 5978)
)

# 计算定基增长率
result <- df %>%
  group_by(level) %>%
  mutate(growth_rate = average / average[year == 2019]) %>%
  ungroup()

print(result)

运行结果:

levelyearaveragegrowth_rate
Low201913001.0000
Mid201920651.0000
High201921941.0000
Low202029662.2815
Mid202047232.2872
High202059152.6960
Low202140493.1146
Mid202159152.8644
High202159782.7247

方法二:左连接基准年数据(更直观)

如果希望更清晰地展示基准值的来源,可以先提取2019年的数据作为基准表,再通过left_join和原表合并后计算:

# 提取2019年作为基准表
base_data <- df %>%
  filter(year == 2019) %>%
  rename(base_average = average) %>%
  select(level, base_average)

# 左连接并计算增长率
result <- df %>%
  left_join(base_data, by = "level") %>%
  mutate(growth_rate = average / base_average) %>%
  select(-base_average) # 可选:移除基准值列

print(result)

额外扩展:计算百分比形式的增长值

如果需要的是增长百分比(比如“增长128%”而非“2.28倍”),只需修改计算逻辑:

mutate(growth_rate_percent = (average / average[year == 2019] - 1) * 100)

这样就能得到以百分比表示的变化幅度啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:32:43