С
xa=aggregate(x$avg,by=list(x$value),FUN=weighted.mean,w=x$weight)
выдает ошибку
Ошибка в weighted.mean.default (X [[1L]], ...): «x» и «w» должны имеют одинаковую длину
Но
weighted.mean(x$avg,w=x$weight);
отлично работает.
Как указано для старой резьбы R , вы можете использовать by вместо:
by
wt <- c(5, 5, 4, 1)/15 x <- c(3.7,3.3,3.5,2.8) xx <- data.frame(avg=x, value=gl(2,2), weight=wt) by(xx, xx$value, function(x) weighted.mean(x$avg, x$weight))
Это вопрос «миллионов способов убрать кошку», вот решение plyr (с использованием данных примера @ chl):
plyr
ddply(xx,.(value),summarise, wm = weighted.mean(avg,weight))