Пожалуйста, примите во внимание следующее:
Для целевого значения target
Я хочу найти «лучшую» комбинацию чисел.
Можно придумать лекарство с целевой дозой 80 мг, но под рукой есть только 5, 20, 30 или 50 мг.
«Лучшая» комбинация - это комбинация, в которой каждое число представляется наименее возможным.
Для примера медицины это будет 50 мг + 30 мг вместо 16 х 5 мг.
Я управлял циклом while
, который возвращает матрицу mat
:
library(dplyr)
target <- 80
combi <- c(5, 20, 30, 50)
#set empty matrix
mat <- matrix(combi, ncol = length(combi),dimnames = )
# while loop
while(target > 0){
fills <- floor(target / combi)
#fills[fills == 0] <- NA
mgfills <- fills * combi
target <- target - last(mgfills[mgfills > 0])
target
mat <- rbind(mat, fills)
}
mat[mat == 0] <- NA
mat
#> [,1] [,2] [,3] [,4]
#> 5 20 30 50
#> fills 16 4 2 1
#> fills 6 1 1 NA
В строке последнее число (исключая NA) - это число, которое я ищу. На следующем шаге я хочу заполнить data.frame
частотой, необходимой для каждого значения, которое должно выглядеть следующим образом:
data.frame(combi = combi,
freq = c(0, 0, 1, 1))
#> combi freq
#> 1 5 0
#> 2 20 0
#> 3 30 1
#> 4 50 1
Создано в 2019-05-29 пакетом Представить (v0.2.1)
Мои вопросы:
- Как перейти от
matrix
в приведенном выше примере к желаемому data.frame
в том же примере?
- Кто-нибудь знает другой способ или пакет для вычисления этих комбинаций?
Большое спасибо!