使用NA权重的R中的加权平均值

时间:2016-10-26 17:52:37

标签: r mean na

{{1}}

上面的代码给出了 NA 作为答案,我认为 na.rm 只会忽略向量a而不是b 中的NA值。如何忽略向量b中的 NA 或权重是否具体。我只是无法将NA更改为0,我知道这样可以解决问题但是在公式中寻找调整。

3 个答案:

答案 0 :(得分:4)

这是我为解决这个问题而写的函数:

weighted_mean <- function(x, w, ..., na.rm = FALSE){

  if(na.rm){

    df_omit <- na.omit(data.frame(x, w))

    return(weighted.mean(df_omit$x, df_omit$w, ...))

  } 

  weighted.mean(x, w, ...)
}

答案 1 :(得分:1)

我通过wweighted.mean中的权重coalesce进行了如下简单修改:

a = c(1,2,NA,4)
b = c(10,NA,30,40)
weighted.mean(a, dplyr::coalesce(b,0), na.rm = T)

我的想法是我将丢失的权重替换为零,因此可以修复错误。它返回结果为3.4,:))。

答案 2 :(得分:0)

我修改了Mhairi的代码,使其不使用data.frame或na.omit:

weighted_mean = function(x, w, ..., na.rm=F){
  if(na.rm){
    x1 = x[!is.na(x)&!is.na(w)]
    w = w[!is.na(x)&!is.na(w)]
    x = x1
  }
  weighted.mean(x, w, ..., na.rm=F)
}

R内置的weighted.mean na.rm = T不处理NA权重,这确实令人惊讶。只是浪费了几个小时才发现它。