2011-08-22 127 views
6

随着如何按加权平均值对组进行汇总数据?

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

工作正常。

+1

当您使用聚合时,可以将数据集分成块。所以加权平均值是针对大量数据进行的。所以权重应该来自这个块。但是,您可以提供所有数据的权重。因此错误信息。 – mpiktas

+0

这样的东西应该可以工作:'aggregate(x [,c(“avg”,“weight”)],by = list(x $ value),FUN = function(d)weighted.mean(d [,1], d [,2]))' – mpiktas

+0

你可以给这个问题一些合适的标签吗? (如果这种语言是R,[tag:r]标记看起来是正确的。) –

回答

7

以于old R thread建议,你可以用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

这是一个“百万的方式皮肤猫”的问题,这里有一个plyr溶液(使用@ CHL的示例数据):

ddply(xx,.(value),summarise, wm = weighted.mean(avg,weight))