计算值将平均分配

时间:2019-07-08 11:18:59

标签: r

下面的4个是输入数据框:

LCtoLC

structure(list(Item = structure(c(1L, 1L, 1L), .Label = "8T4121", class = "factor"), 
LC = structure(c(1L, 2L, 2L), .Label = c("MW92", "OY01"), class = "factor"), 
ToLC = structure(1:3, .Label = c("OY01", "RM11", "RS11"), class = "factor")), class = "data.frame", row.names = c(NA, -3L))

客户服务

structure(list(Item = structure(c(1L, 1L, 1L, 1L), .Label = "8T4121", class = "factor"), 
LC = structure(1:4, .Label = c("MW92", "OY01", "RM11", "RS11"
), class = "factor"), custfcst = c(10L, 12L, 10L, 10L)), class = "data.frame", row.names = c(NA, -4L))

Rolledfcst

structure(list(Item = structure(c(1L, 1L, 1L), .Label = "8T4121", class = "factor"), 
LC = structure(c(1L, 2L, 2L), .Label = c("MW92", "OY01"), class = "factor"), 
ToLC = structure(1:3, .Label = c("OY01", "RM11", "RS11"), class = "factor"), 
Rolledfcst = c(22L, 10L, 9L)), class = "data.frame", row.names = c(NA,-3L))

安全库存

structure(list(Item = structure(c(1L, 1L, 1L, 1L), .Label = "8T4121", class = "factor"), 
LC = structure(1:4, .Label = c("MW92", "OY01", "RM11", "RS11"
), class = "factor"), SS = c(15L, 7L, 5L, 5L), x = c(0.25, 
0.25, NA, NA)), class = "data.frame", row.names = c(NA, -4L))

输出:

LC Item SS x Rolledfcst custfcst xprcnt remainingss prcntvalue share SSNew Leftover
MW92    8T4121  15.00000    0.25    22  10  3.750000    11.25000    0.3125000   3.515625    7.265625    7.734375
OY01    8T4121  14.73438    0.25    19  12  3.683594    11.05078    0.3870968   4.277722    7.961316    6.773059
RM11    8T4121  11.77306    NA  0   10  NA  NA  1.0000000   NA  NA  NA
RS11    8T4121  NA  NA  0   10  NA  NA  1.0000000   NA  NA  NA

在此输出中,OY上的剩余部分应与连接到RM&RS的LCtoLC数据帧OY中的RM和RS之间平均分配,因此应基于此数据帧将剩余部分分割并添加到RM和RS中的SS上。

到目前为止一直尝试的代码:

   library(plyr)
    library(dplyr)
    library(tidyr)
    library(igraph)
    library(data.table)
    library(magrittr)
    library(reshape2)


lctolc <- read.csv("LCtoLC.csv")
custfcst <- read.csv("custfcst.csv")
rolledfcst <- read.csv("rolledfcst.csv")
safetystock <- read.csv("safetystock.csv")

bodlane <- lapply(
  lapply(split(lctolc, lctolc$Item), function(x) graph.data.frame(x[, 2:3])), 
  function(x) lapply(
    all_simple_paths(x, from = V(x)[degree(x, mode = "in") == 0], 
                     to = V(x)[degree(x, mode = "out") == 0]),
    function(y) as.data.table(t(names(y))) %>% setnames(paste0("LC", seq_along(.)))
  ) %>% rbindlist(fill = TRUE)
) %>% rbindlist(fill = TRUE, idcol = "Item")


df1<- merge(custfcst,lctolc,by=c("LC","Item"),all.x=TRUE)
df2<- merge(rolledfcst, df1,by.x=c("LC","Item","ToLC"),by.y=c("LC","Item","ToLC"),all=TRUE)
Final<- merge(safetystock, df2, by = c("LC","Item"))


#Replace NA in decomposed with 0
Final$Rolledfcst <- replace(Final$Rolledfcst, is.na(Final$Rolledfcst), 0);

#Remove multiple rows and aggregate rolledfcst
Final <- ddply(Final,.(LC,Item),summarize,SS=mean(SS),x=mean(x),Rolledfcst=sum(Rolledfcst),custfcst=mean(custfcst))

#Sort by Item for Max Rolled fcst
Final <- Final[order(Final$Item,-Final$Rolledfcst),];


df <- as.data.frame(unique(Final$Item))

df_final<- NA
j <- 1
i<-1
for(j in 1:nrow(df)) {
  Final_v1 <- Final[Final$Item == as.character(df[j,1]),]


  for(i in 1:nrow(Final_v1)) {

    Final_v1[i,7] <- (Final_v1[i,4] * Final_v1[i,3]) #xprcnt
    Final_v1[i,8]= (Final_v1[i,3] - Final_v1[i,7])   #remainingss
    Final_v1[i,9] = (Final_v1[i,6]  / (Final_v1[i,6] +Final_v1[i,5]))   #prcntvalue
    Final_v1[i,10] = (Final_v1[i,9] * Final_v1[i,8])  #share
    Final_v1[i,11] = (Final_v1[i,7] + Final_v1[i,10])  #SSNew
    Final_v1[i,12] = (Final_v1[i,3] - Final_v1[i,11])  #Leftover

    Leftover <- Final_v1[i,12]
    Final_v1[i+1,3]  <- Final_v1[i+1,3] + Leftover
  }

  df_final <- rbind(df_final,Final_v1)

}

df_final <-subset(df_final, !is.na(df_final$Item))
names(df_final)[7] <- "xprcnt"
names(df_final)[8] <- "remainingss"
names(df_final)[9] <- "prcntvalue"
names(df_final)[10] <- "share"
names(df_final)[11] <- "SSNew"
names(df_final)[12] <- "Leftover"

0 个答案:

没有答案