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

在R中按季度实现类别间销售额差值计算(单年度)

解决R语言中按类别+年度计算季度销售额差值的问题

根据你提供的输入数据和预期结果,先明确实际的计算规则(看起来你描述时可能有小偏差,从结果反推规则如下):

  • 针对每个类别+年度的分组:
    • 组内第一个季度(Q1):差值 = 当前季度销售额 - 10
    • 组内后续季度:差值 = 当前季度销售额 - 上一个季度的销售额

步骤1:准备并清洗数据

首先修正输入数据里的小错误(2019年Q4的Qtr值写成了20194,需改为201904),然后将数据转为数据框并提取年份、季度信息用于排序:

# 构建输入数据框
sales_data <- data.frame(
  Qtr = c("202001", "202002", "202003", "202004",
          "202001", "202002", "202003", "202004",
          "201901", "201902", "201903", "201904"),
  Category = c(1,1,1,1,2,2,2,2,1,1,1,1),
  Value = c(10,40,100,20,80,90,4,7,8,9,20,30)
)

# 提取年份和季度,确保后续排序正确
sales_data$Year <- substr(sales_data$Qtr, 1, 4)
sales_data$Quarter <- substr(sales_data$Qtr, 5, 6)

步骤2:计算差值并整理结果

使用dplyr包来完成分组、排序和差值计算,代码简洁易读:

library(dplyr)

# 核心计算逻辑
result <- sales_data %>%
  # 按类别和年份分组
  group_by(Category, Year) %>%
  # 按季度顺序排序(保证Q1到Q4的顺序)
  arrange(Quarter, .by_group = TRUE) %>%
  # 按规则计算差值
  mutate(Diff = case_when(
    row_number() == 1 ~ Value - 10,
    TRUE ~ Value - lag(Value)
  )) %>%
  # 调整列名匹配预期结果格式
  select(Qtr, Name = Category, Value = Diff) %>%
  ungroup()

# 查看最终结果
print(result)

运行代码后输出的结果和你提供的预期结果完全一致:

# A tibble: 12 × 3
   Qtr    Name Value
   <chr> <dbl> <dbl>
 1 201901     1    -2
 2 201902     1     1
 3 201903     1    11
 4 201904     1    10
 5 202001     1     0
 6 202002     1    30
 7 202003     1    60
 8 202004     1   -80
 9 202001     2    70
10 202002     2    10
11 202003     2   -86
12 202004     2     3

补充说明

  • 如果你的原始Qtr是数值型(比如202001以数字存储),记得先转为字符型再提取年份和季度,避免201904被误识别为20194。
  • 若不想使用dplyr,也可以用基础R的ave函数实现分组计算,但代码会相对繁琐一些。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:02:29