R中的库存预测计算
Inventory Projection Calculation in R
我正在尝试替换我们的供应链团队目前用于销售预测和库存预测的过时 Excel 报告,为此我正在使用 R。
所需的输出是一个数据框,其中一列是在 N 周.[=] 的跨度内每周的 预计收盘库存头寸 13=]
我苦苦挣扎的部分是递归计算 关闭库存头寸。下面是带有虚拟数据的数据框子集,其中 "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))
尽管工作起来很有魅力,但我想知道是否有另一种方法可以实现这一点?
我认为在上面的问题中,您不必太担心递归,因为股票预测看起来就像开盘股票减去预测的累计总和。你可以这样做:
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
我正在尝试替换我们的供应链团队目前用于销售预测和库存预测的过时 Excel 报告,为此我正在使用 R。 所需的输出是一个数据框,其中一列是在 N 周.[=] 的跨度内每周的 预计收盘库存头寸 13=]
我苦苦挣扎的部分是递归计算 关闭库存头寸。下面是带有虚拟数据的数据框子集,其中 "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))
尽管工作起来很有魅力,但我想知道是否有另一种方法可以实现这一点?
我认为在上面的问题中,您不必太担心递归,因为股票预测看起来就像开盘股票减去预测的累计总和。你可以这样做:
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