【问题标题】:Inventory Projection Calculation in RR中的库存预测计算
【发布时间】:2022-01-04 18:07:15
【问题描述】:

我正在尝试替换我们的供应链团队目前用于销售预测和库存预测的过时 Excel 报告,为此我正在使用 R。 所需的输出是一个数据框,其中一列是 N 周 内每周的预计结束库存头寸

我正在努力解决的部分是关闭库存头寸的递归计算。下面是带有虚拟数据的数据框子集,其中 "stock_projection" 是期望结果。

我刚刚开始学习 R 中的递归,所以我不确定如何在这里实现它。任何帮助将不胜感激!

week forecast opening_stock stock_projection
1 10 100 100
2 11 89
3 12 77
4 10 67
5 11 56
6 10 46
7 12 34
8 11 23
9 9 14
10 12 2

更新

我已设法修改here 解释的解决方案并复制了上述结果:

inventory<- tibble(week = 1, opening_stock = 100)
forecast<-  tibble(week = 2:10, forecast = c(11, 12, 10, 11, 10, 12, 11, 9, 12) )

dat <- full_join(inventory, forecast)

dat2 <- dat %>%
  mutate(forecast = -forecast) %>%
  gather(transaction, value, -week) %>%
  arrange(week) %>%
  mutate(value = replace_na(value, 0))


dat2 %>%
  mutate(value = cumsum(value)) %>%
  ungroup() %>%
  group_by(week) %>%
  summarise(stock_projection = last(value))

尽管工作就像一个魅力,我想知道是否还有其他方法可以实现这一目标?

【问题讨论】:

    标签: r excel recursion projection inventory-management


    【解决方案1】:

    我认为在上面的问题中,您不必太担心递归,因为股票预测看起来就像开盘股票减去预测的累积总和。你可以这样做:

    library(dplyr)
    dat <- tibble(
      week = 1:10, 
      forecast = c(10,11,12,10,11,10,12,11,9,12), 
      opening_stock = c(100, rep(NA, 9))
    )
    
    dat <- dat %>% 
      mutate(fcst = case_when(week == 1 ~ 0, 
                              TRUE ~ forecast), 
        stock_projection = case_when(
        week == 1 ~ opening_stock, 
        TRUE ~ opening_stock[1] - cumsum(fcst))) %>% 
      dplyr::select(-fcst)
    
    dat
    # # A tibble: 10 × 4
    #    week forecast opening_stock stock_projection
    #   <int>    <dbl>         <dbl>            <dbl>
    # 1     1       10           100              100
    # 2     2       11            NA               89
    # 3     3       12            NA               77
    # 4     4       10            NA               67
    # 5     5       11            NA               56
    # 6     6       10            NA               46
    # 7     7       12            NA               34
    # 8     8       11            NA               23
    # 9     9        9            NA               14
    # 10    10       12            NA                2
    

    【讨论】:

    • DaveArmstrong ,这是我在更新后的最后一个问题中希望的精益解决方案。非常感谢!
    • 如果您更改了 opening_stock 编号,您可能需要考虑将 TRUE ~ opening_stock[1] - cumsum(fcst))) %&gt;% 更改为 TRUE ~ tail(opening_stock[!is.na(opening_stock)]) - cumsum(fcst))) %&gt;% tail(opening_stock[!is.na(opening_stock)]) 获取最后一个非 NA 号码。
    • 这是一个很好的电话马尔西奥!我将使用 tail() 函数来验证代码。谢谢!
    猜你喜欢
    • 2021-01-21
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    相关资源
    最近更新 更多