r - R dplyr:使用前一行值和函数计算行值
问题描述
我正在尝试在 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 值。
预期结果如下所示:
谢谢您的帮助!
解决方案
我认为您可能希望包括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
推荐阅读
- javascript - 画布在 React.js 中无法正确缩放
- r - 从可用的最小向量创建数据框
- c# - 使用 RemoveFromSuperview() 后如何从超级视图中恢复视图
- scala - 具有主要功能的scala测试
- javascript - 属性名称丢失?
- python - 解释用于回溯算法的 Python 示例代码
- perl - 您如何使用 Moo::Google Perl 模块进行 Google People API 调用?
- .htaccess - 重定向和附加查询字符串参数
- sql - 如何插入 BLOB 值
- android - 带有 FragmentStatePagerAdapter 的 ViewPager 不断重新创建已删除的片段