R 如何在同时更新本金金额的同时进行滚动/连续减法?

R 如何在同时更新本金金额的同时进行滚动/连续减法?,r,dplyr,data.table,R,Dplyr,Data.table,假设一个数据帧,如下所示: 库(tidyverse) df1% 变异(moneyAvailable=20, productPrice=rnorm(n=nrow(.),平均值=7,标准差=1)) df1 #>#tibble:4 x 3 #>产品价格 #> #>1产品1206.53 #>2产品2 20 8.67 #>3产品3 20 6.15 #>4产品4 20 6.60 我想计算一个运行总数,对于第一行,从moneyAvailable中减去produ

假设一个
数据帧
,如下所示:

库(tidyverse)
df1%
变异(moneyAvailable=20,
productPrice=rnorm(n=nrow(.),平均值=7,标准差=1))
df1
#>#tibble:4 x 3
#>产品价格
#>                        
#>1产品1206.53
#>2产品2 20 8.67
#>3产品3 20 6.15
#>4产品4 20 6.60
我想计算一个运行总数,对于第一行,从
moneyAvailable
中减去
productPrice
,但使用结果值从第二行的
productPrice
中减去,依此类推

最终结果如下(我正在硬编码)。
我自己的尝试是尝试使用来自
dplyr
cumsum
lag
组合,但它们在这里并不相关

df1$moneyRemaining=c(14.77,6.95,0.86,-7.05)
df1
#>#tibble:4 x 4
#>产品价格可用产品价格剩余金额
#>                                  
#>1产品1206.5314.8
#>2产品2 20 8.67 6.95
#>3产品3 20 6.15 0.86
#>4产品4 20 6.60-7.05

由(v0.3.0)于2020-01-28创建,以下是我将如何解决它。我们使用
row\u number
计算交易顺序。如果是第一笔交易,我们会做
货币价格
,否则我们只需使用
累计金额
减去价格

df1 %>%
    mutate(rownum = row_number()) %>%
    mutate(moneyRemaining = cumsum(ifelse(rownum == 1, 
                                          moneyAvailable - productPrice, 
                                          -productPrice)))

#   product  moneyAvailable productPrice rownum moneyRemaining
#   <chr>             <dbl>        <dbl>  <int>          <dbl>
# 1 product1             20         6.87      1         13.1  
# 2 product2             20         5.90      2          7.23 
# 3 product3             20         6.58      3          0.649
# 4 product4             20         6.11      4         -5.46 
df1%>%
变异(rownum=row_number())%>%
mutate(moneyRemaining=cumsum)(如果其他(rownum==1,
可用资金-产品价格,
-(产品价格)
#产品货币可用产品价格rownum剩余货币
#                                    
#1产品1206.87113.1
#2产品2 20 5.90 2 7.23
#3产品3 20 6.58 3 0.649
#4产品4 20 6.11 4-5.46

在较大的数据集(可能有多个客户)上,您需要确保数据排序正确(
arrange
),然后您可以使用
group\u by

IIUC,
moneyAvailable-cumsum(productPrice)
?但是,我想知道你的预期结果。在第一行,我希望剩余的钱是20-6.53=13。47@Uwe非常感谢,当我在dplyr中查找函数时,这就在我的眼皮底下了!