我正在尝试根据一些条件来确定如何在R中创建累加或滚动总和。
所讨论的数据是对图书馆借阅的几百万次观察,而问题是要确定满足需求所需的给定书籍/书名的副本数。
因此,对于每个Title.ID,对于第一个实例(ID.Index),应从1个副本开始。然后,对于之后的每个实例,根据REQUEST.DATE是否在上一个请求的16周(112天)之内,确定是否需要另一个副本。
# A tibble: 15 x 3
# Groups: Title.ID [2]
REQUEST.DATE Title.ID ID.Index
<date> <int> <int>
1 2013-07-09 2 1
2 2013-08-07 2 2
3 2013-08-20 2 3
4 2013-09-08 2 4
5 2013-09-28 2 5
6 2013-12-27 2 6
7 2014-02-10 2 7
8 2014-03-12 2 8
9 2014-03-14 2 9
10 2014-08-27 2 10
11 2014-04-27 6 1
12 2014-08-01 6 2
13 2014-11-13 6 3
14 2015-02-14 6 4
15 2015-05-14 6 5
棘手的部分是,不仅根据请求数(ID.Index)和某些先前贷款的REQUEST.DATE来确定是否需要新副本,还取决于先前的累计金额。
例如,对于标题2的第三个请求(Title.ID 2,ID.Index 3),现在有两个副本,因此要确定是否需要新副本,必须查看REQUEST.DATE是否为在first(不是second)请求(ID.Index 1)的112天内。相比之下,对于标题6的第三次请求(Title.ID 6,ID.Index 3),只有一个副本可用(因为请求2不在112天内),因此基于以下条件确定是否需要新副本:回顾ID.Index 2的REQUEST.DATE。
所需的输出(“副本”)将接受每个新请求(ID.Index),然后根据可用副本的数量回头查看相关的REQUEST.DATE,这样做意味着查看该副本的累加总和。之前的计算。 (注意:最大份数为10。)
我已为以下示例提供了所需的输出(“副本”)。
# A tibble: 15 x 4 # Groups: Title.ID [2] REQUEST.DATE Title.ID ID.Index Copies <date> <int> <int> <dbl> 1 2013-07-09 2 1 1 2 2013-08-07 2 2 2 3 2013-08-20 2 3 3 4 2013-09-08 2 4 4 5 2013-09-28 2 5 5 6 2013-12-27 2 6 5 7 2014-02-10 2 7 5 8 2014-03-12 2 8 5 9 2014-03-14 2 9 5 10 2014-08-27 2 10 5 11 2014-04-27 6 1 1 12 2014-08-01 6 2 2 13 2014-11-13 6 3 2 14 2015-02-14 6 4 2 15 2015-05-14 6 5 2 >
我认识到解决方案将远远超出我的能力范围,因此,对于将来如何解决此类问题的任何解决方案或建议,我将深表感谢。
感谢一百万!
* 4/19更新:新示例,其中可以在延迟后添加新副本,即不按顺序添加。我还添加了显示从给定先前请求以来的天数的列,这有助于根据是否有新副本来检查是否应添加新副本。
示例2:应与第三次请求一起添加新副本,因为自上次请求以来只有96天(并且只有一本)
REQUEST.NUMBER REQUEST.DATE Title.ID ID.Index Days.Since Days.Since2 Days.Since3 Days.Since4 Days.Since5 Copies <fct> <date> <int> <int> <drtn> <drtn> <drtn> <drtn> <drtn> <int> 1 BRO-10680332 2013-10-17 6 1 NA days NA days NA days NA days NA days 1 2 PEN-10835735 2014-04-27 6 2 192 days NA days NA days NA days NA days 1 3 PEN-10873506 2014-08-01 6 3 96 days 288 days NA days NA days NA days 1 4 PEN-10951264 2014-11-13 6 4 104 days 200 days 392 days NA days NA days 1 5 PEN-11029526 2015-02-14 6 5 93 days 197 days 293 days 485 days NA days 1 6 PEN-11106581 2015-05-14 6 6 89 days 182 days 286 days 382 days 574 days 1
示例3:由于有两个副本,所以最后一个请求应该添加新副本,而最早的请求是45天。
REQUEST.NUMBER REQUEST.DATE Title.ID ID.Index Days.Since Days.Since2 Days.Since3 Days.Since4 Days.Since5 Copies
<fct> <date> <int> <int> <drtn> <drtn> <drtn> <drtn> <drtn> <int>
1 BRO-10999392 2015-01-20 76 1 NA days NA days NA days NA days NA days 1
2 YAL-11004302 2015-01-22 76 2 2 days NA days NA days NA days NA days 2
3 COR-11108471 2015-05-18 76 3 116 days 118 days NA days NA days NA days 2
4 HVD-11136632 2015-07-27 76 4 70 days 186 days 188 days NA days NA days 2
5 MIT-11164843 2015-09-09 76 5 44 days 114 days 230 days 232 days NA days 2
6 HVD-11166239 2015-09-10 76 6 1 days 45 days 115 days 231 days 233 days 2
我正在尝试根据一些条件来确定如何在R中创建累加或滚动总和。有问题的数据集是对图书馆借贷的几百万次观察,问题是……
您可以使用runner包在cumulative window上应用任何R功能。这次我们使用f
执行函数x = REQUEST.DATE
。我们只计算在min(x) + 112
内的观测值的数量。
我能够根据每个标题在请求后112天内(创建返回日期之后)找到其他请求的最大数量,找到可行的解决方案。