r中的加权平均命令工作异常

r中的加权平均命令工作异常,r,average,weighted-average,R,Average,Weighted Average,假设我有这些向量: q1<-c(9,8,10,9,3,2,1,2,4,5) q2<-c(9,7,8,6,5,4,8,7,8,9) q3<-c(0,0,0,5,9,5,9,5,0,5) 但结果不等于下面的直接计算 sum(c(mean(q1),mean(q2),mean(q3))*corvector) #6.248393 如何正确使用加权平均值?你能解释一下这个命令是如何计算这个值的吗?我们检查函数加权。平均值 methods('weighted.mean') #[1] we

假设我有这些向量:

q1<-c(9,8,10,9,3,2,1,2,4,5)
q2<-c(9,7,8,6,5,4,8,7,8,9)
q3<-c(0,0,0,5,9,5,9,5,0,5)
但结果不等于下面的直接计算

sum(c(mean(q1),mean(q2),mean(q3))*corvector)
#6.248393

如何正确使用加权平均值?你能解释一下这个命令是如何计算这个值的吗?

我们检查函数
加权。平均值

methods('weighted.mean')
#[1] weighted.mean.Date*     weighted.mean.default*  
#[3] weighted.mean.difftime* weighted.mean.POSIXct* 
#[5] weighted.mean.POSIXlt* 

getAnywhere('weighted.mean.default')
function (x, w, ..., na.rm = FALSE) 
{
    if (missing(w)) {
        if (na.rm) 
            x <- x[!is.na(x)]
        return(sum(x)/length(x))
    }
    if (length(w) != length(x)) 
        stop("'x' and 'w' must have the same length")
    w <- as.double(w)
    if (na.rm) {
        i <- !is.na(x)
        w <- w[i]
        x <- x[i]
    }
    sum((x * w)[w != 0])/sum(w) ### here
}
方法(“加权平均值”)
#[1] 加权平均值日期*加权平均值默认值*
#[3] 加权。平均值。离散时间*加权。平均值。POSIXct*
#[5] 加权平均POSIXlt*
getAnywhere('weighted.mean.default')
函数(x,w,…,na.rm=FALSE)
{
如果(缺失(w)){
如果(不适用)
x
sum(c(mean(q1),mean(q2),mean(q3))*corvector)
#6.248393
methods('weighted.mean')
#[1] weighted.mean.Date*     weighted.mean.default*  
#[3] weighted.mean.difftime* weighted.mean.POSIXct* 
#[5] weighted.mean.POSIXlt* 

getAnywhere('weighted.mean.default')
function (x, w, ..., na.rm = FALSE) 
{
    if (missing(w)) {
        if (na.rm) 
            x <- x[!is.na(x)]
        return(sum(x)/length(x))
    }
    if (length(w) != length(x)) 
        stop("'x' and 'w' must have the same length")
    w <- as.double(w)
    if (na.rm) {
        i <- !is.na(x)
        w <- w[i]
        x <- x[i]
    }
    sum((x * w)[w != 0])/sum(w) ### here
}
out1 <- sum(c(mean(q1),mean(q2),mean(q3))*corvector)/sum(corvector)
out2 <- weighted.mean(c(mean(q1),mean(q2),mean(q3)), corvector, na.rm = TRUE)
identical(out1, out2)
#[1] TRUE