【发布时间】:2017-09-08 10:26:27
【问题描述】:
我有一个布局如下的 data.table
TestData <- data.table(Threshold = 20,
Upto = 100,
Demand = c(0,0,5,0,50,10,10,10,10,50,20,60),
Stock = c(100,0,0,0,0,0,0,0,0,0,0,0))
股票价值应计算为累积值,公式为:
如果库存(前一行)减去需求(当前行)小于或等于 超过阈值,然后更新 Stock 中的当前单元格 “Upto”中的值。否则用库存(前一行)减去需求(当前行)来更新库存(当前行)的值。
然后程序应该重新开始。结果应如下所示:
TestData <- data.table(Threshold = 20,
Upto = 100,
Demand = c(0,0,5,0,50,10,10,10,10,50,20,60),
Stock = c(100,100,95,95,45,35,25,100,90,40,100,40))
Threshold Upto Demand Stock
1: 20 100 0 100
2: 20 100 0 100
3: 20 100 5 95
4: 20 100 0 95
5: 20 100 50 45
6: 20 100 10 35
7: 20 100 10 25
8: 20 100 10 100
9: 20 100 10 90
10: 20 100 50 40
11: 20 100 20 100
12: 20 100 60 40
我所做的如下:
TestData[, Stock:= ifelse(cumsum(shift(Stock, 0, type="lead") - Demand) <= Threshold,
Upto,
cumsum(shift(Stock, 0, type="lead") - Demand))]
但在第一次更新后,计算停止并显示 100 每次平铺结束。库存中的第一个值是我手动设置的初始值。谢谢!
【问题讨论】:
-
我认为您可能需要一个循环,因为每次迭代都取决于前一次迭代的值(前一天的库存)
-
@docendodiscimus 是的,我认为需要一个循环,因为有一个重置规则(累积需求在达到 80 后的一行间隙后重新开始)。
标签: r data.table shift