R 合并流动支付以获得每日余额

R 合并流动支付以获得每日余额,r,data.table,R,Data.table,我正在处理数据。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",

我正在处理
数据。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"))
    
    到期总额
    列包括截至2013-11-05的所有付款

    我想以最简单的方式创建
    余额在_日期
    列(为每个日期提供交易过账前的余额);我目前的解决方案相当长,所以我现在不包括它。最终目标是:

       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)
    
    编辑

    以下是我目前正在做的事情;难道没有更好的办法吗

    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)
    
    dt[过账>截止日期(“2013-11-05”),
    余额t:=cumsum(余额变化)-余额变化+到期总额,by=id]
    setorder(dt,id,-过帐)
    
    dt[postingSee无法使用数据集复制dt操作、键入。应为
    =
    而不是
    :=
    ;fixed@G.Grothendieck你能解释一下吗?我没有看到确切的相似之处,尽管
    过滤器
    功能在我的曲目中很好。真正的问题是
    tota的日期前后都有付款l_due
    是正确的,我没有看到一种简单的方法将其转换为时间序列。请添加您当前的方法,以便其他人不会浪费时间重新创建它。