{{1}}
上面的代码给出了 NA 作为答案,我认为 na.rm 只会忽略向量a而不是b 中的NA值。如何忽略向量b中的 NA 或权重是否具体。我只是无法将NA更改为0,我知道这样可以解决问题但是在公式中寻找调整。
答案 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)
我通过w
对weighted.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权重,这确实令人惊讶。只是浪费了几个小时才发现它。