问题描述
我有以下数据集:
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