2016-11-09 70 views
0

我有一组R百分比,我想使其等于100%。我需要个人百分比是最接近的整数。在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

看看'?round' – Nate

+0

可重现的例子来显示你的意思? – cdeterman

+0

请添加示例数据集和您尝试过的代码 – HubertL

回答

2

它不是看起来像一个微不足道的问题。关于这个问题的一些很好的讨论可以看到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 
} 

希望这有助于功能。请注意,在上面的函数中根本没有错误检查。