Управление запасами Расчет по R - PullRequest
0 голосов
/ 06 июня 2018

Как рассчитать прогноз данных инвентаризации на R?

Допустим, у меня есть данные инвентаризации:

Date, Product, Inventory
1-Jan-2017, A, 30
1-Jan-2017, B, 20
1-Jan-2017, C, 10

И данные продаж:

Date, Product, Sales
1-Feb-2017, A, 10
1-Feb-2017, B, 5
1-Mar-2017, A, 3

... (до конца 2017 года)

И данные о закупках

Date, Product, QtyPurchased
1-Feb-2017, A, 20
1-Feb-2017, B, 10
1-Feb-2017, C, 5

Как создать новый (прогнозируемый моментальный снимок запаса) фрейм данных для R, такой, чтобы фрейм данных выглядел как ():

Date, Product, Inventory
1-Jan-2017, A, 30
1-Feb-2017, A, 30+20-10 = 40
...
1-Jan-2017, B, 20
1-Feb-2017, B, 20-5+10 = 15

(расчет предназначен для объяснения логики чисел "15" и "40". Они не должны быть напечатаны в кадре данных)

Пока вычисленияправильно, расположение данных не имеет значения.

В Excel было бы использовать VLOOKUP и указывать на разные позиции ячеек (например, перемещая одну ячейку влево / вправо, чтобы получить значения для следующего месяца),

Но как мне это сделать на R?

1 Ответ

0 голосов
/ 06 июня 2018

Сначала мы объединяем наборы данных.

library(tidyverse)
dat <- full_join(inventory, sales)
dat <- full_join(dat, purchase)

Мы также заменяем Sales их отрицательными значениями.Затем мы конвертируем дату и заменяем NA на 0.

dat2 <- dat %>%
  mutate(Sales = -Sales) %>%
  gather(transaction, value, -Date, -Product) %>%
  mutate(Date = as.Date(Date, format = "%d-%B-%Y")) %>%
  arrange(Date) %>%
  mutate(value = replace_na(value, 0))

Теперь, как уровни расположены в transaction, это то, что QtyPurchased был последним в каждой дате, мы можем получить кумулятивную суммуvalue по дате и получить значение, соответствующее QtyPurchased (используя функцию dplyr::last).

dat2 %>%
  group_by(Product) %>%
  mutate(value = cumsum(value)) %>%
  ungroup() %>%
  group_by(Date, Product) %>%
  summarise(value = last(value)) %>%
  arrange(Product)

# # A tibble: 7 x 3
# # Groups:   Date [3]
#   Date       Product value
#   <date>     <chr>   <dbl>
# 1 2017-01-01 A          30
# 2 2017-02-01 A          40
# 3 2017-03-01 A          37
# 4 2017-01-01 B          20
# 5 2017-02-01 B          25
# 6 2017-01-01 C          10
# 7 2017-02-01 C          15

Данные

inventory <- read.table(text = "Date, Product, Inventory
1-Jan-2017, A, 30
1-Jan-2017, B, 20
1-Jan-2017, C, 10", header = T, sep = ",", stringsAsFactors = F, strip.white = T)
inventory

sales <- read.table(text = "Date, Product, Sales
1-Feb-2017, A, 10
1-Feb-2017, B, 5
1-Mar-2017, A, 3", header = T, sep = ",", stringsAsFactors = F, strip.white = T)

purchase <- read.table(text = "Date, Product, QtyPurchased
1-Feb-2017, A, 20
1-Feb-2017, B, 10
1-Feb-2017, C, 5", header = T, sep = ",", stringsAsFactors = F, strip.white = T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...