2011-08-22 74 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))