这是数据示例:
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”的新字段,并且需要按部门使用以下计算:
我只能考虑使用for循环方法来执行此操作,但我认为这不是很聪明...进行此计算的最佳方法是什么?
答案 0 :(得分:1)
我能够使用@ 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")
)
)
答案 1 :(得分:0)
根据您的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"))
我假设您可以填写计算内容,因为您给出的方程式不使用您提供的示例列。
欢呼