r - 从 R 中的 excel 模拟增量计算

标签 r excel dataframe data-manipulation

我正在尝试模仿当前使用 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/

相关文章:

r - 当变量嵌入空格时如何在 R 中使用重新公式

excel - 两个减号在一起的含义 ("double unary")

python - pandas 数据帧行的两两相等

python - 如何将由空格分隔的文本文件读取到 DataFrame 中?

r - 使用 if 条件修改 for 循环以在 R 中应用格式

r - WGCNA 共享统计方法的命名空间

r - 将购物 list 分为多列

vba - 通过代码在 Outlook 中发送/接收

excel - "Application"作为 Excel VBA 中的默认对象呢?

python - 按时间差索引 pandas 数据帧