Ответ 1
На самом деле это не так тривиально, как может показаться. Некоторые хорошие обсуждения проблемы можно увидеть в этом потоке, и именно там я получил решение (которое идентично идее в OP).
Здесь функция, которая может сделать это для вас
round_percent <- function(x) {
x <- x/sum(x)*100 # Standardize result
res <- floor(x) # Find integer bits
rsum <- sum(res) # Find out how much we are missing
if(rsum<100) {
# Distribute points based on remainders and a random tie breaker
o <- order(x%%1, sample(length(x)), decreasing=TRUE)
res[o[1:(100-rsum)]] <- res[o[1:(100-rsum)]]+1
}
res
}
Надеюсь, это поможет. Обратите внимание на то, что в вышеприведенной функции вообще отсутствует проверка ошибок.