R 中的条件累积和/差

问题描述

我有以下数据集:

 library(data.table)
 dt <- fread('
    Year   ID   Total      Quantity
    2017   A     2000        100
    2016   A     2000        200 
    2015   A     2000        50
    2014   B     2000        100
    2013   B     2000        300
 ')

我想创建以下数据集:

  want <- fread('
         Year   ID   Total      Quantity   Balance
         2017   A     2000        100       1900
         2016   A     2000        200       1700
         2015   A     2000         50       1650
         2014   B     2000        100       1650
         2013   B     2000        300       1650
   ')

仅当 ID == A 时,balance 列是通过从 Quantity 中减去 Total 创建的。但是,这是一个累积过程,我们首先计算第一行的余额 ( 1900),然后使用该值计算第二行中的余额 (1900 - 200 = 1700)。

对我如何做到这一点有什么建议吗?

谢谢

解决方法

您可以使用 cumsum of dt$Quantity 乘以条件 dt$ID=="A",假设第一行可用于开始。

dt$Balance <- dt$Total[1] - cumsum(dt$Quantity * +(dt$ID=="A"))
dt
#   Year ID Total Quantity Balance
#1: 2017  A  2000      100    1900
#2: 2016  A  2000      200    1700
#3: 2015  A  2000       50    1650
#4: 2014  B  2000      100    1650
#5: 2013  B  2000      300    1650