R dplyr: вычисление значений строки с использованием предыдущего значения строки и функции - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь создать функцию в R, которая позволит мне определить дату, когда товара не будет в наличии. Мне бы хотелось, чтобы эта функция могла учитывать запланированные входящие заказы и отображать «промежуточный итог» единиц на складе. Ниже приводится воспроизводимая идея того, что я смог сделать до сих пор.

library(tidyverse)
library(lubridate)

runrate <- 25

onHand <- tibble(date = Sys.Date(), OnHand = 2000)

ord_tbl <- tibble(date = c(ymd("2020-04-09"), ymd("2020-04-12"), ymd("2020-04-17")), onOrder = c(200, 500, 100))



date_tbl <- tibble(date = seq.Date(from = Sys.Date(), to = Sys.Date() + 180, by = "day")) %>% 
                mutate(Month = month(date, label = TRUE))

joined_tbl <- date_tbl %>% 
    left_join(onHand) %>% 
    left_join(ord_tbl) 

joined_tbl <- joined_tbl %>% 
    mutate(OnHand = coalesce(joined_tbl$OnHand, 0),
           onOrder = coalesce(joined_tbl$onOrder, 0),
           id = row_number()) %>% 
    mutate(usage = id * runrate) %>% 
    select(id, everything()) 

start_inv_value <- joined_tbl %>% 
    filter(date == Sys.Date()) %>% 
    select(OnHand)

joined_tbl %>% 
    mutate(projected_On_Hand = start_inv_value$OnHand - (id * usage) + onOrder)

В идеале я хотел бы взять начальные инвентарные значения под рукой, а затем вычесть ежедневное использование и добавить единицы, которые, как ожидается, будут получены; Однако я не могу снизить значение projected_on_hand предыдущих дней.

Ожидаемые результаты будут выглядеть следующим образом:

Anticipated Results

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 09 апреля 2020

Я думаю, что вы можете включить совокупную сумму onOrder (используйте cumsum). Кроме того, вы можете просто вычесть использование для каждой строки.

joined_tbl %>% 
  mutate(projected_On_Hand = start_inv_value$OnHand - usage + cumsum(onOrder))

Вывод

# A tibble: 181 x 7
      id date       Month OnHand onOrder usage projected_On_Hand
   <int> <date>     <ord>  <dbl>   <dbl> <dbl>             <dbl>
 1     1 2020-04-08 Apr     2000       0    25              1975
 2     2 2020-04-09 Apr        0     200    50              2150
 3     3 2020-04-10 Apr        0       0    75              2125
 4     4 2020-04-11 Apr        0       0   100              2100
 5     5 2020-04-12 Apr        0     500   125              2575
 6     6 2020-04-13 Apr        0       0   150              2550
 7     7 2020-04-14 Apr        0       0   175              2525
 8     8 2020-04-15 Apr        0       0   200              2500
 9     9 2020-04-16 Apr        0       0   225              2475
10    10 2020-04-17 Apr        0     100   250              2550
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...