【r<-方案】如何计算几何平均数

作者: 王诗翔 | 来源:发表于2018-07-05 17:06 被阅读20次

    刚遇到一个有意思的问题,如何用R计算几何平均数。如果数字少,简单,计算很容易,直观上,先用prod函数连乘,然后开方即可。

    但我的数值大,连乘几十个之后R结果就是INF了,然后开方就还是INF,算不出来!

    聪明人就会动脑筋了,转个弯,先取对数,再指数化!Stackoverflow上的解答让我大开眼界,下面给一个通用的计算函数:

    gm_mean = function(x, na.rm=TRUE, zero.propagate = FALSE){
        if(any(x < 0, na.rm = TRUE)){
            return(NaN)
        }
        if(zero.propagate){
            if(any(x == 0, na.rm = TRUE)){
                return(0)
            }
            exp(mean(log(x), na.rm = na.rm))
        } else {
            exp(sum(log(x[x > 0]), na.rm=na.rm) / length(x))
        }
    }
    

    最后一个参数指定是否容忍0的存在。

    https://stackoverflow.com/questions/2602583/geometric-mean-is-there-a-built-in

    相关文章

      网友评论

        本文标题:【r<-方案】如何计算几何平均数

        本文链接:https://www.haomeiwen.com/subject/euipuftx.html