R的舍入百分比达到100%

时间:2016-11-09 20:55:38

标签: r rounding percentage

我在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。

1 个答案:

答案 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