R:如何在计算中使用列中的第一个值,然后为以下行切换到此结果

R:如何在计算中使用列中的第一个值,然后为以下行切换到此结果,r,algorithm,R,Algorithm,这是一个数据示例: df <- data.frame( dept = c(rep('FIREDEPT', 5), rep('WATERDEPT', 5)), month = 201808:201812, initial_stock = sample(75884:85347, 10), variable_predicted = sample(50000:100000, 10), variable2_predicted= sample(1:100, 10) / 100)

这是一个数据示例:

df <- data.frame(
  dept = c(rep('FIREDEPT', 5), rep('WATERDEPT', 5)),
  month = 201808:201812,
  initial_stock = sample(75884:85347, 10),
  variable_predicted = sample(50000:100000, 10),
  variable2_predicted= sample(1:100, 10) / 100)

df根据您的df是否总是被排序,每个部门的第一行是您想要不同的行,那么您可以使用以下任一选项:

library(dplyr) 
df %>% group_by(dept) %>% mutate(predicted_stock= ifelse(row_number()==1, "CalcA", "CalcB"))
df %>% group_by(dept) %>% mutate(predicted_stock= ifelse(month==min(month), "CalcA", "CalcB"))
我假设您可以填写计算结果,因为您给出的方程式不使用您提供的示例列


干杯

我可以通过@user2738526 post来做到这一点。不要认为这仍然是最佳方式,但比我最初尝试的方式要好

library(dplyr)
library(data.table)
# if first month, than use intial stock
# I "recalculate" the initial_stock, 
# this is specific to the real scenario
df <- df %>% mutate(initial_stock = 
                      ifelse(month == min(month), 
                        initial_stock, 
                        0
                        )
                    )

# calculate the predicted stock using cumsum
df <- df %>% group_by(DEPTO) %>% mutate(predicted_stock =
                                          cumsum(
                                            initial_stock 
                                            + variable_predicted * variable2_predicted
                                          )
                                        )
# "recalculation" of the initial_sock is updated
# this is specific to the real scenario
df <- df %>% group_by(DEPTO) %>% mutate(initial_sock = 
                                        ifelse(month == min(month), 
                                            initial_stock , 
                                            shift(predicted_stock, type = "lag")
                                            )
                                        )
库(dplyr)
库(数据表)
#如果是第一个月,则使用初始库存
#我“重新计算”初始库存,
#这是特定于真实场景的
df%变异(初始库存=
如果其他(月)=分钟(月),
初始库存,
0
)
)
#使用cumsum计算预测库存
df%分组依据(DEPTO)%>%突变(预测库存=
孜然(
初始库存
+预测变量*预测变量2
)
)
#更新初始_sock的“重新计算”
#这是特定于真实场景的
df%group\U by(DEPTO)%%>%变异(初始sock=
如果其他(月)=分钟(月),
初始库存,
班次(预测库存,类型=“滞后”)
)
)

您需要澄清什么是
variable\u predicted
variable2\u predicted
,它们与您的示例数据不匹配。对不起,我忘了在代码上加上相同的名称。它只是一个表示计算的标记变量,重要的是能够以增量方式使用前一行的结果,但在第一次迭代时使用不同的计算。感谢您的回复。不幸的是,此代码没有使用预测库存的上一个值,因为它尚未记录,所以第二次计算不起作用。微小的改进:
ifelse(cond,x,0)
可能是
cond*x
。顺便说一句,你应该列出你的包,即使它们与另一个答案相同。(我想不是,因为dplyr不包括
shift