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

如何在R中生成季度值及12个月滚动季度求和结果?

需求说明

已有按季度汇总后的数据集(通过df$Quarter <- quarter(df$Month, fiscal_start = 4, with_year = T)生成季度列,格式如2022.1),需要为每个区域新增一行数据,计算对应季度的连续4个季度求和结果(即12个月滚动值),最终合并原季度数据与滚动数据,并添加标识区分数据类型。

示例原始数据:

区域季度指标1
Area_a2022.15
Area_a2021.41
Area_a2021.32
Area_a2021.26
Area_b2022.19
Area_b2021.47
Area_b2021.32
Area_b2021.21

期望结果(核心为新增滚动求和行):

区域季度指标1时间范围
Area_a2022.15季度值
Area_a2021.41季度值
Area_a2021.32季度值
Area_a2021.26季度值
Area_a2022.11412个月滚动
Area_b2022.19季度值
Area_b2021.47季度值
Area_b2021.32季度值
Area_b2021.21季度值
Area_b2022.11912个月滚动

解决方案(R语言)

假设你的季度汇总数据框名为quarter_df,可通过以下步骤实现:

  1. 为原始季度数据添加类型标识
library(dplyr)

# 标记原始数据为"季度值"
quarter_df <- quarter_df %>%
  mutate(时间范围 = "季度值")
  1. 计算每个区域的12个月滚动求和
    如果数据中每个区域恰好只有4个季度(如示例),直接分组求和即可:
# 生成滚动求和数据
rolling_df <- quarter_df %>%
  group_by(区域) %>%
  arrange(Quarter) %>% # 确保季度按时间顺序排列
  summarise(
    季度 = last(Quarter), # 取最新季度作为滚动值的对应季度
    指标1 = sum(指标1),
    时间范围 = "12个月滚动"
  ) %>%
  ungroup()

如果数据集包含更多历史季度(超过4个),需用滚动窗口函数实现,可借助zoo包:

library(zoo)

rolling_df <- quarter_df %>%
  group_by(区域) %>%
  arrange(Quarter) %>%
  # 计算向后滚动4个季度的和,不足4个的填充NA后过滤
  mutate(指标1 = rollsumr(指标1, 4, fill = NA)) %>%
  filter(!is.na(指标1)) %>%
  mutate(时间范围 = "12个月滚动") %>%
  ungroup()
  1. 合并数据并排序
# 合并原始数据与滚动求和数据
final_df <- bind_rows(quarter_df, rolling_df) %>%
  # 按区域、季度倒序、数据类型排序,让滚动值紧跟对应区域的季度值
  arrange(区域, desc(Quarter), 时间范围)

运行后final_df即为符合需求的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:25:25