我正在尝试模仿当前使用 R 在 Excel 中手动完成的过程,以帮助简化该过程,因此不需要手动完成。这是我正在使用的一些示例数据的示例(请记住,这是一个更大的数据集的片段)。
qty_available<- c(13500, 8500, 4600)
supply_qty<- c(0, 1000, 0)
forecast<- c(1200, 400, 3000)
demand_q<- c( 100, 800, 6000)
df<- data.frame(qty_available, supply_qty, forecast, demand_q)
我正在尝试进行以下操作(伪代码):qty_available = previous(qty_available) + supply_qty - forecast - demand_q
我可以忽略第一个观察,因为它与我的任务无关。所以在第二个观察中,我们将有
13,500 + 1000 - 400 - 800
给我们13,300
.第三个观察结果将是 13,300 + 0 - 3000 - 6000
给我们4300
.如果我要在 Excel 中打开这个数据集(以 CSV 格式读取),过程很简单。我会在单元格 A3
= A2+B3-C3-D3
中使用这个公式.然后只需将其向下拖动到该列的其余部分。我将如何在 R 中模仿这一点?
我尝试使用以下命令这样做
df<- mutate(df, qty_available = lag(qty_available) + supply_qty - forecast - demand_q)
此命令不起作用,因为它使用的是原始 8500 而不是新计算的 13,300 可用滞后数量,我正在努力寻找另一种方法来做到这一点。任何建议将不胜感激!所需的输出如下:
qty_available<- c(13500, 13300, 4300)
desired_output<- data.frame(qty_available, supply_qty, forecast, demand_q)
最佳答案
这里..1
是“累积”中的前一个值,..3
是第二个参数的下一个值。 ..1
的初始值是第一个参数的第一个元素。
library(tidyverse) # or dplyr and purrr
df %>%
mutate(newcol = accumulate2(qty_available,
tail(supply_qty - forecast - demand_q, -1),
~ ..1 + ..3))
# qty_available supply_qty forecast demand_q newcol
# 1 13500 0 1200 100 13500
# 2 8500 1000 400 800 13300
# 3 4600 0 3000 6000 4300
另一种选择(提供相同的输出)df %>%
mutate(newcol = accumulate(tail(supply_qty - forecast - demand_q, -1), `+`,
.init = qty_available[1]))
另一个没有任何accumulate
df %>%
mutate(newcol = qty_available[1] +
cumsum(replace(supply_qty - forecast - demand_q, 1, 0)))
关于r - 从 R 中的 excel 模拟增量计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62822553/