Как суммировать данные по группам с взвешенным средним? - PullRequest
7 голосов
/ 22 августа 2011

С

 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);

отлично работает.

Ответы [ 2 ]

7 голосов
/ 22 августа 2011

Как указано для старой резьбы R , вы можете использовать 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))
5 голосов
/ 22 августа 2011

Это вопрос «миллионов способов убрать кошку», вот решение plyr (с использованием данных примера @ chl):

ddply(xx,.(value),summarise, wm = weighted.mean(avg,weight))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...