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

如何在R中按分组动态调用增长率计算DataFrame预期销售额?

解决分组动态计算未来销售额的问题

示例数据构造

先模拟你的数据结构(方便测试验证):

library(tidyverse)

df <- tibble(
  product = rep(c("A", "B"), each = 11),
  region = rep(c("North", "South"), each = 11),
  year = rep(2023:2033, 2),
  growth = rep(c(0.05, 0.08), each = 11), # 每个产品-地区组合对应固定增长率
  sales = ifelse(year == 2023, c(1000, 1500), NA) # 仅2023年有已知销售额
)

核心解决代码

利用dplyr分组 + purrr::accumulate动态读取分组内的增长率:

df <- df %>%
  group_by(product, region) %>%
  arrange(year) %>% # 务必确保年份按升序排列,避免计算逻辑混乱
  mutate(
    sales_expected = accumulate(
      .init = first(sales), # 以2023年的已知销售额为初始值
      .x = 2:n(), # 从第2行(2024年)开始计算后续年份
      .f = function(prev, idx) prev * (1 + first(growth)) # 动态获取当前分组的固定增长率
    ) %>% unlist()
  ) %>%
  ungroup()

简化写法(逻辑更直观)

如果觉得accumulate的参数设置有点绕,也可以用lag逻辑实现:

df <- df %>%
  group_by(product, region) %>%
  arrange(year) %>%
  mutate(
    sales_expected = sales,
    sales_expected = accumulate(sales_expected, ~ if(is.na(.y)) .x * (1 + first(growth)) else .y)
  ) %>%
  ungroup()

关键说明

  1. 分组独立计算:通过group_by(product, region)确保每个产品-地区组合单独运算,新增组合时无需修改代码
  2. 动态取增长率:用first(growth)获取当前分组的固定增长率(每个分组内的growth值一致),替代你之前写死的固定值0.1
  3. 年份排序:必须先按year升序排列,否则累积计算的顺序会出错

内容的提问来源于stack exchange,提问作者piotr.kaczmarski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:53:18