Сначала мы объединяем наборы данных.
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)