我在R中有一组百分比,我希望它等于100%。我需要将各个百分比设为最接近的整数。
我有舍入百分比[20.5,50.6,25.8,3.1]。然后我四舍五入到最接近的整数[20,50,25,3]。然后计算个别小数位[0.5,0.6,0.8.0.1然后按降序排序小数位,但是输出是[3,2,1,4]。我需要将1加到最小小数位的整数,直到达到100。
答案 0 :(得分:4)
它看起来并不像一个小问题。可以看到关于这个问题的一些很好的讨论in this thread,这也是我得到解决方案的地方(与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
}
希望这会有所帮助。请注意,上述函数中根本没有错误检查。
更新:我在MESS
包中实现了此版本。看看MESS::round_percent
。