В R: из матрицы сохраните только последнее наблюдение в строке и установите отдых в NA - PullRequest
1 голос
/ 29 мая 2019

Пожалуйста, примите во внимание следующее:

Для целевого значения 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 в том же примере?
  • Кто-нибудь знает другой способ или пакет для вычисления этих комбинаций?

Большое спасибо!

...