R: Distributing an amount as evenly as possible II

前端 未结 1 1075
轮回少年
轮回少年 2021-01-07 09:34

We have have a certain amount e.g. 300 units. This amount should be as evenly as possible distributed over 40 \"slots\" or \"bins\". It would be easy if each slot would be t

相关标签:
1条回答
  • 2021-01-07 10:20

    How about this

    optimal.fill <- function(a, b, generalLimit = 8){
      a <- pmax(0, pmin(a, generalLimit))
      if(sum(a) < b){
        stop("not enough room")
      }
      if(length(a) * min(a) <= b){
        result <- rep(min(a), length(a))
      } else {
        result <- rep(floor(b / length(a)), length(a))
      }
      while(floor((b - sum(result)) / sum(result < a)) >= 1){
        if(min(a[result < a]) * sum(result < a) <= b - sum(result)){
          result[result < a] <- 
            result[result < a] + rep(min(a[result < a]), sum(result < a))
        } else {
          result[result < a] <- 
            result[result < a] + 
            rep(floor((b - sum(result)) / sum(result < a)), sum(result < a))
        }
      }
      extra <- sample(which(result < a), (b - sum(result)), replace = FALSE)
      result[extra] <- result[extra] + 1
      return(cbind(result,  result / a))
    }
    optimal.fill(ceiling(rnorm(40,10,4)), 300, 8)
    
    0 讨论(0)
提交回复
热议问题