【发布时间】:2019-03-22 14:56:00
【问题描述】:
我正在尝试使用包括我计算的列在内的几列中的滞后行号来计算一列。实际上,我想要一个自引用的累积公式。
一个例子:
library(data.table)
library(lubridate)
dt <- data.table(date = today()+1:10, supply = c(1,1,2,3,1,0,1,2,1,3), demand = c(0,0,1,0,3,2,1,0,1,0), inventory = 0)
date supply demand inventory
1: 2018-10-18 1 0 0
2: 2018-10-19 1 0 0
3: 2018-10-20 2 1 0
4: 2018-10-21 3 0 0
5: 2018-10-22 1 3 0
6: 2018-10-23 0 2 0
7: 2018-10-24 1 1 0
8: 2018-10-25 2 0 0
9: 2018-10-26 1 1 0
10: 2018-10-27 3 0 0
我想要实现的是参考上期库存+供需的库存计算:
date supply demand inventory
1: 2018-10-18 1 0 0
2: 2018-10-19 1 0 1
3: 2018-10-20 2 1 2
4: 2018-10-21 3 0 3
5: 2018-10-22 1 3 6
6: 2018-10-23 0 2 4
7: 2018-10-24 1 1 2
8: 2018-10-25 2 0 2
9: 2018-10-26 1 1 4
10: 2018-10-27 3 0 4
但是,当我尝试时:
dt[,inventory := shift(inventory, fill = 0) + shift(supply, fill = 0) - shift(demand, fill = 0)]
我明白了:
date supply demand inventory
1: 2018-10-18 1 0 0
2: 2018-10-19 1 0 1
3: 2018-10-20 2 1 1
4: 2018-10-21 3 0 1
5: 2018-10-22 1 3 3
6: 2018-10-23 0 2 -2
7: 2018-10-24 1 1 -2
8: 2018-10-25 2 0 0
9: 2018-10-26 1 1 2
10: 2018-10-27 3 0 0
因为 shift 指的是以前存储的数字,而不是新计算的数字。
我可以使用循环来解决这个问题,但它并不适合我作为一个优雅的解决方案。有没有其他方法可以到达那里?
【问题讨论】:
标签: r data.table