结合流量支付以获得每日余额

时间:2015-02-02 00:35:59

标签: r data.table

我正在与data.table合作尝试合并两条信息:

  1. 每天到指定帐户的交易清单
  2. 每个帐户在共同的已知日期的余额。
  3. 所以我手头的对象可以简化为:

    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)
    

0 个答案:

没有答案