2011-08-22 19 views
6

ConCome riassumere i dati per gruppo con media ponderata?

xa=aggregate(x$avg,by=list(x$value),FUN=weighted.mean,w=x$weight) 

mi dà un errore

Error in weighted.mean.default (X [[1L]], ...): 'x' e 'w' deve avere la stessa lunghezza

Ma

weighted.mean(x$avg,w=x$weight);

funziona correttamente.

+1

Quando si utilizza l'aggregato, è stato diviso il set di dati nei blocchi. La media ponderata funziona su una parte di dati. Quindi i pesi dovrebbero essere da questo pezzo. Tuttavia, si forniscono i pesi da tutti i dati. Da qui il messaggio di errore. – mpiktas

+0

qualcosa di simile dovrebbe funzionare: 'aggregato (x [, c (" avg "," peso ")], per = lista (x $ valore), FUN = funzione (d) ponderata.mean (d [, 1], d [, 2])) ' – mpiktas

+0

Potresti dare a questa domanda dei tag adatti? (Se questa lingua è R, il tag [tag: r] sembra corretto.) –

risposta

7

Come suggerito su un old R thread, è possibile utilizzare by invece:

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

essendo questo un 'milione di modi per scuoiare un gatto' domanda, ecco una soluzione plyr (utilizzando @ dati di esempio di CHL):

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