tfr*_*950 4 excel r data-manipulation dataframe
我正在尝试模拟当前使用 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)
Run Code Online (Sandbox Code Playgroud)
我正在尝试进行以下操作(伪代码):
qty_available = previous(qty_available) + supply_qty - forecast - demand_q
Run Code Online (Sandbox Code Playgroud)
我可以忽略第一个观察结果,因为它与我的任务上下文无关。
所以在第二个观察中,我们会给13,500 + 1000 - 400 - 800我们13,300. 第三个观察结果将是13,300 + 0 - 3000 - 6000给予我们4300。
如果我要在 Excel 中打开此数据集(以 CSV 格式读取),则过程很简单。我会在 cell 中使用这个公式A3 = A2+B3-C3-D3。然后只需将其向下拖动到列的其余部分即可。
我将如何在 R 中模仿这一点?
我已尝试使用以下命令执行此操作
df<- mutate(df, qty_available = lag(qty_available) + supply_qty - forecast - demand_q)
Run Code Online (Sandbox Code Playgroud)
此命令不起作用,因为它使用原始 8500 而不是新计算的可用滞后数量中的 13,300,我正在努力找出另一种方法来做到这一点。任何建议将不胜感激!
所需的输出如下:
qty_available<- c(13500, 13300, 4300)
desired_output<- data.frame(qty_available, supply_qty, forecast, demand_q)
Run Code Online (Sandbox Code Playgroud)
这..1是“累积”..3中的前一个值,是第二个参数的下一个值。for 的初始值..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
Run Code Online (Sandbox Code Playgroud)
另一种选择(给出相同的输出)
df %>%
mutate(newcol = accumulate(tail(supply_qty - forecast - demand_q, -1), `+`,
.init = qty_available[1]))
Run Code Online (Sandbox Code Playgroud)
而另一个没有任何 accumulate
df %>%
mutate(newcol = qty_available[1] +
cumsum(replace(supply_qty - forecast - demand_q, 1, 0)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |