2012-06-12 14 views
5

Powiel możliwe:
Calculating weighted mean and standard deviationJak obliczyć średnią ważoną w R?

Jak obliczyć średnią ważoną w R?

Na przykład, posiada 4 elementy, z których jeden element jest wielkości (lub: długość, szerokość, itd) 10 i 3 pozycje są wielkości 2.

> z = data.frame(count=c(1,3), size=c(10,2)) 
> z 
    count size 
1  1 10 
2  3 2 

Średnia ważona jest (10 * 1 + 2 * 3)/4 = 4.

+1

Dlaczego upadły? – Frank

+6

Mówiąc dla siebie, przegłosowałem, ponieważ wyszukiwarka "ważona średnia w R" zwraca stronę pomocy dla weighted.mean jako pierwszy wynik. – joran

+3

@Frank Umieść wskaźnik myszy nad dolnym trójkątem pod liczbą głosów obok swojego Q. Wskazówka dotycząca narzędzia mówi: "To pytanie nie pokazuje żadnych wysiłków badawczych; ...". Biorąc pod uwagę, że ktoś tutaj zadał już bardzo podobne pytanie, które można łatwo znaleźć za pomocą wyszukiwania, a wyszukiwarka Google przeniesie Cię do właściwej odpowiedzi, być może dlatego otrzymałeś Downvotes i twój Q został zamknięty. –

Odpowiedz

19

Zastosowanie weighted.mean:

> weighted.mean(z$size, z$count) 
[1] 4 
11

Wydaje się, że już wiem, jak obliczyć to wystarczy sugerować w dobrym kierunku, aby go wdrożyć. Ponieważ R jest wektorowy, to jest całkiem prosta:

with(z, sum(count*size)/sum(count)) 

with nieco tylko oszczędza na pisanie i odpowiada sum(z$count*z$size)/sum(z$count)

lub użyć wbudowanej funkcji weighted.mean() jak również podkreślił. Używanie własnej funkcji może okazać się szybsze, ale nie spowoduje tego samego sprawdzania błędów, co funkcja wbudowana.

builtin <- function() with(z, weighted.mean(count, size)) 
rollyourown <- function() with(z, sum(count*size)/sum(count)) 

require(rbenchmark) 
    benchmark(builtin(), rollyourown(), 
      replications = 1000000, 
      columns = c("test", "elapsed", "relative"), 
      order = "relative") 
#----- 
      test elapsed relative 
2 rollyourown() 13.26 1.000000 
1  builtin() 22.84 1.722474 
Powiązane problemy