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中查找函数时,这就在我的眼皮底下了!