我正在与data.table
合作尝试合并两条信息:
所以我手头的对象可以简化为:
dt<-data.table(id=c(1,2,3,3,3,3),
posting=as.Date(c("2013-12-24","2013-10-09",
"2013-12-22","2013-12-10",
"2013-11-12","2013-10-09")),
balance_change=c(-57,-150,-145,-145,-145,-145),
total_due=c(57,1570,11255,11255,11255,11255),
key=c("id","posting"))
哪个给出了
> dt
id posting balance_change total_due
1: 1 2013-12-24 -57 57
2: 2 2013-10-09 -150 1570
3: 3 2013-10-09 -145 11255
4: 3 2013-11-12 -145 11255
5: 3 2013-12-10 -145 11255
6: 3 2013-12-22 -145 11255
total due
列包含最多包含2013-11-05
的所有付款。
我想创建balance_at_date
列(以最简单的方式为每个日期提供交易发布之前的余额);我目前的解决方案相当旷日持久,所以我暂时不会把它包括在内。最终目标是:
id posting balance_change total_due balance_at_date
1: 1 2013-12-24 -57 57 57
2: 2 2013-10-09 -150 1570 1720
3: 3 2013-10-09 -145 11255 11400
4: 3 2013-11-12 -145 11255 11255
5: 3 2013-12-10 -145 11255 11105
6: 3 2013-12-22 -145 11255 10960
最好的方法是什么?
修改
这是我到目前为止所做的事情;有没有更好的方法来做到这一点?
dt[posting>as.Date("2013-11-05"),
balance_t:=cumsum(balance_change)-balance_change+total_due,by=id]
setorder(dt,id,-posting)
dt[posting<=as.Date("2013-11-05"),
balance_t:=cumsum(-balance_change)+total_due,by=id]
setorder(dt,id,posting)