这是我的旧问题的延续根据现有列的条件创建新列 我有一个与以前类似的情况,但现在我在输入中有一个附加列,在输出中有 3 个附加列 - 以及 6 个要检查的条件
数据集现在是这样的
structure(list(Item = c("P_6000_1", "P_6000_1", "P_6000_1", "P_6000_3",
"P_6000_3", "P_6000_3", "P_6000_5", "P_6000_5", "P_6000_5"),
Customer = c("Customer_4", "Customer_4", "Customer_4", "Customer_4",
"Customer_4", "Customer_4", "Customer_1", "Customer_1", "Customer_1"),
DemandID = c("Order_175", "Order_176", "Order_177", "Order_186",
"Order_187", "Order_188", "Order_195", "Order_196", "Order_197"),
Order = c(450L, 479L, 365L, 2890L, 3450L, 2500L, 234L, 443L, 321L),
Forecast = c(3300L, 3300L, 3300L, 3846L, 3846L, 3846L, 3070L, 3070L, 3070L),
RTF = c(3113L, 3113L, 3113L, 0L, 0L, 0L, 3200L, 3200L, 3200L)),
row.names = c(NA, -9L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x00000000025c1ef0>)
我有 2 个新列 DemandID 和 Order
对于每个 Item、Customer 组合,只有一个 Forecast 和 RTF 值 - 重复它们以填满行
我对新列的条件是
1. Forecast < Order < RTF -> COM_O = Forecast, NEW_O = Order - Forecast, UNF_O = 0, COM_F = 0, NEW_F = 0
2. Forecast < RTF < Order -> COM_O = Forecast, NEW_O = RTF - Forecast, UNF_O = Order - RTF, COM_F = 0, NEW_F = 0
3. RTF < Order < Forecast -> COM_O = RTF, NEW_O = Order - RTF, UNF_O = 0, COM_F = 0, NEW_F = Forecast - Order,
4. RTF < Forecast < Order -> COM_O = RTF, NEW_O = Forecast - RTF, UNF_O = Order - Forecast, COM_F = 0, NEW_F = 0
5. Order < Forecast < RTF -> COM_Order = Order, NEW_Order = 0, UNF_Order = 0, COM_FCST = Forecast - Order, NEW_FCST = 0
6. Order < RTF < Forecast -> COM_Order = Order, NEW_Order = 0, UNF_Order = 0, COM_Forecast = RTF - Order, NEW_Fcst = Forecast - RTF
我知道我可以通过使用获取项目客户组合的预测和 RTF
cols = c('Item','Customer')
tempDT <- dt[, ItemCust := (paste0(unlist(.SD), collapse="")), .SDcols= cols, by=.(row=seq_len(nrow(dt)))]
tempDT1 = tempDT[,.(ItemCust, Forecast, RTF)]
tempDT1 <- tempDT1[, .(Forecast = mean(Forecast), RTF = mean(RTF)), by = .(ItemCust)]
但在这之后我被困住了。
我的问题是我如何循环遍历每个项目的需求 ID - 客户组合并使用上述条件。在根据 demandid 行生成新列之后,还应更新 RTF 和预测值
编辑:添加输入和预期输出
input = data.frame(Item = c("P_6000_1", "P_6000_1", "P_6000_1"),
Customer = c("Customer_4", "Customer_4", "Customer_4"),
DemandID = c("Order_175", "Order_176", "Order_177"),
Order = c(450L, 479L, 365L),
Forecast = c(3300L, 3300L, 3300L),
RTF = c(3113L, 3113L, 3113L))
output1 = data.frame(Item = c("P_6000_1", "P_6000_1", "P_6000_1"),
Customer = c("Customer_4", "Customer_4", "Customer_4"),
DemandID = c("Order_175", "Order_176", "Order_177"),
Order = c(450L, 479L, 365L),
COM_O = c(450, 479, 365))
output2 = data.frame(Item = c("P_6000_1"),
Customer = c("Customer_4"),
Forecast = c(2006),
RTF = c(1819))
输出 2 可以来自我创建的 tempDT1。这是减去订单后从预测和 rtf 中剩余的任何内容。在这个数据表上,我将在 Order = 0 的基础上运行最后两个条件的查询
tempDT1[, c("New_F","Com_F") :=
.(fifelse(Forecasts > RTF, Forecasts - RTF, 0),
fifelse(Forecasts > RTF, RTF, Forecasts))]
并获取 New_F 和 Com_F 所需的列,然后根据 Item 和 Customer 重新连接表。