我有以下数据:
item <- c('abc','def','ghi','jkl')
stocks <- c(100,200,140,150)
Forecast <- c(120,180,140,90)
df <- data.frame(item,stocks,Forecast)
df$difference <- df$Forecast -df$stocks
df$difference <- ifelse(df$difference<0,0,df$difference)
df$new_forecast <- ifelse(df$difference>0,df$stocks,df$Forecast)
total_diff <- sum(df$difference)我想将' total_diff‘分配给使用total_diff均值预测<库存的项目的预测。这应该隐蔽地完成,直到total_diff变为0。
例如:运行上述代码后的总差值是20。现在必须将20分配给'def','ghi','jkl‘项。每个人的预测都会增加6.67。现在,我们看到'ghi‘项的差异(预测股票)是6.67。现在,6.67必须在剩余的项目中重新分配。因此,'def‘和'jkl’的预测值分别增加了3.34。
下面是一个工作示例:

注意:实际数据包含1000+项
发布于 2021-01-02 18:22:19
基本上,以下内容将对您起作用:
library(dplyr)
df %>% left_join(.,
df %>%
filter(difference <= 0) %>%
mutate(mean_distribution = total_diff / n()))
Joining, by = c("item", "stocks", "Forecast", "difference", "new_forecast")
item stocks Forecast difference new_forecast mean_distribution
1 abc 100 120 20 100 NA
2 def 200 180 0 180 6.666667
3 ghi 140 140 0 140 6.666667
4 jkl 150 90 0 90 6.666667https://stackoverflow.com/questions/65537106
复制相似问题