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

  • 本文关键字:然后 结果 第一个 计算 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)

我需要创建一个名为"predicted_stock"的新字段,并且它需要按部门使用以下计算:

  • 如果月份是第一个月,则计算initial_stock + variable_predicted * variable2_predicted
  • 如果月份不是第一个,则使用上一个predicted_stock + variable_predicted * variable2_predicted

我只能想到用 for 循环方法做到这一点,但我认为这不是很聪明......进行此计算的最佳方法是什么?

我能够使用@user2738526帖子做到这一点。 不要认为这仍然是最佳方法,但比我最初尝试做的要好。

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")
)
)

根据你的 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"))

我假设您可以填写计算内容,因为您给出的方程式不使用您提供的示例列。

干杯

相关内容

最新更新