根据订单规格匹配通用托盘规格


# undebug(zuiyoutuopanzhonglei)
zuiyoutuopanzhonglei <- function(
  DF =                      # 默认值
    data.frame(
      index = c(1:8),
      x = c(2,2,3,3,3,4,5,5),
      y = c(2,3,1,2,3,4,1,5),
      count = c(1,2,3,1,2,3,1,2)
      )  ,
  k1 = 1  , k2 = 1  ,       # 默认值
  k3 = 0.1                  # 默认值
  )  {

  ########################################################
  ########################################################

  df = dplyr:: arrange( DF, x, y)
  LIST = list()
  i = 1
  
  ########################################################
  ########################################################

  while ( NROW(df) > 0) {
      
    LIST[[i]] = df[ 1, ]
    x = df[ 1, 2]
    y = df[ 1, 3]
    
    if ( NROW(df) > 1) {
      
      for (j in 2: NROW(df)) {
        
        if (
          
          df[ j, 2] >= x &
          df[ j, 3] >= y &
          df[ j, 2] <= x + k1 &
          df[ j, 3] <= y + k2
          
          ) {
          
          LIST[[i]] = rbind( LIST[[i]], df[ j, ])
          
        }
      }
    }
  
  df = df[ -which( df$index %in% LIST[[i]]$index), ]
  i = i + 1
  
  }
  
  ########################################################
  ########################################################
  
  TP = matrix(nrow = length( LIST) ,
              ncol = 4)
  colnames(TP) = c( "index", "x", "y", "count")
  TP = as.data.frame( TP)
  
  for (i in 1: length( LIST)) {
    
    TP[ i, 1] = paste( LIST[[i]]$index, collapse = ",") # 
    TP[ i, 2] = max( LIST[[i]]$x) + k3
    TP[ i, 3] = max( LIST[[i]]$y) + k3
    TP[ i, 4] = sum( LIST[[i]]$count)
    
  }
  
  tp = dplyr:: arrange( TP, x, y)
  return(tp)

}

# debug(zuiyoutuopanzhonglei)
# zuiyoutuopanzhonglei()
# undebug(zuiyoutuopanzhonglei)

guige <- readxl:: read_excel("E:/guige.xlsx", sheet = "Sheet1")
# 导入大小横剪生产规格数据 index规格(长宽)编号;x宽,y长;count这种规格2021年生产托数
jieguo <- zuiyoutuopanzhonglei( guige, k1 = 80, k2 = 80, k3 = 20)

你可能感兴趣的:(r语言)