我有一个data.table具有以下布局如何在data.table使用移位计算,累计值中的R
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))
股票值应为具有下式的累积值来计算:
如果库存(上一行)减去点播(当前行)小于或大于阈值等于 ,比用在“高达”的 值更新股票的当前小区。否则使用库存(前一行)减去需求(当前行)更新库存(当前行)的值。
然后程序应该重新开始。结果应该如下所示:
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后一行之后重新开始)。 – Frank