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

基于tidyverse实现分组计算2022年Index与前三年均值的比值

解决方法:计算2022年Index与2019-2021年均值的比值

原代码问题分析

你之前的代码用lag()逐行提取前3、2、1行的Index值再取平均,这是移动平均逻辑,而非针对2019-2021这特定三年的均值计算,因此无法满足需求。

方案1:先计算均值再合并匹配(清晰直观)

library(tidyverse)

# 第一步:单独计算每个分组2019-2021年的Index均值
mean_2019_2021 <- Index_df %>%
  filter(Year %in% 2019:2021) %>%
  group_by(Economy, SitcRev3Product) %>%
  summarise(mean_index_2019_2021 = mean(Index, na.rm = TRUE), .groups = "drop")

# 第二步:合并均值到原数据,仅在2022年计算比值
Index_df <- Index_df %>%
  left_join(mean_2019_2021, by = c("Economy", "SitcRev3Product")) %>%
  mutate(Index_2022_to_mean = ifelse(Year == 2022, Index / mean_index_2019_2021, NA))

方案2:分组内直接计算(更紧凑)

Index_df <- Index_df %>%
  group_by(Economy, SitcRev3Product) %>%
  mutate(
    # 提取分组内2019-2021的Index值计算均值
    mean_index_2019_2021 = mean(Index[Year %in% 2019:2021], na.rm = TRUE),
    # 仅在2022年生成比值,其余年份设为NA
    Index_2022_to_mean = case_when(
      Year == 2022 ~ Index / mean_index_2019_2021,
      TRUE ~ NA_real_
    )
  ) %>%
  ungroup()

注意事项

  • 加入na.rm = TRUE是为了处理部分分组2019-2021年存在缺失值的情况,避免均值直接变成NA。
  • 若你的数据每个Economy + SitcRev3Product分组每年仅有一条记录,两种方案均可稳定运行;若存在多条年记录,需先按分组+年份聚合(比如取每年的均值/总和)再执行上述逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:52:36