5
У меня есть следующие данные:Взвешенное среднее по ряду
a=c(1:10)
b=c(16:25)
c=c(24:33)
wa=c(3,7,3,3,3,3,3,3,3,1)
wb=c(3,2,3,3,3,3,3,3,3,8)
wc=c(4,1,4,4,4,4,4,4,4,1)
z=data.frame(a,b,c,wa,wb,wc)
Я хочу, чтобы получить взвешенное среднее для каждой записи. Так что я попытался это:
weight=apply(subset(z,select=c(wa,wb,wc)),1,function(x) x)
z$weightMean=apply(subset(z,select=c(a,b,c)),1,function(x) weighted.mean(x,weight))
Который возвращается следующее сообщение об ошибке:
Error in weighted.mean.default(x, weight) :
'x' and 'w' must have the same length
Итак, я попытался это:
weight=as.vector(weight)
z$weightMean=apply(subset(z,select=c(a,b,c)),1,function(x) weighted.mean(x,weight))
Который также вернулся и ту же ошибку.
Что я делаю неправильно?
Только первый метод может иметь дело со значениями NA , используя 'weighted.mean (..., na.rm = T)'. Второй метод возвращает NA, как только один из столбцов содержит NA. – Martin
@Martin - 'rowSums()' поддерживает аргумент 'na.rm', поэтому он должен работать и для этого. – Chase