2012-06-12 27 views
5

Olası Çoğalt:
Calculating weighted mean and standard deviationR? Da ağırlıklı ortalama nasıl hesaplanır?

nasıl R ağırlıklı ortalamasını hesaplamak mı? (: Uzunluk, genişlik, vb veya) 10 ve 3 elemanları belli bir boyutta ağırlıklı ortalama (10 * 1 + 2 * 3)/4 = 4 olduğu 2.

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

vardır

Örneğin, 1 elemanının büyüklüğü olan 4 elementi vardır.

+1

Neden düşüş yok? – Frank

+6

Kendim için konuştuğumda, "R'de ağırlıklı ortalama" için yapılan bir google araması, ilk sonuç olarak weighted.mean için yardım sayfasını döndürdüğü için downvoted. – joran

+3

@Frank Q'nuzun yanındaki oy sayısının altındaki aşağı üçgenin üzerine gelin. Araç ipucu şöyle diyor: "Bu soru herhangi bir araştırma çabası göstermiyor ...". Burada birisinin bir arama yoluyla kolayca bulunabileceği çok benzer bir Soruya zaten sahip olduğunu ve bir Google aramasının sizi doğru Cevaba götürdüğünü göz önüne alındığında, bunun nedeni Downvot'ları almanızın ve Q'nuzu kapatmanızın nedeni olabilir. –

cevap

19

Kullanım weighted.mean: Zaten sadece bunu uygulamaya doğru yönde bir dürtmek gerekir, bu nasıl hesaplanacağını bilmek gibi

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

görünüyor. R vectorized olduğundan, bu oldukça basittir:

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

with bit sadece yazarak tasarruf ve sum(z$count*z$size)/sum(z$count)

Ya da belirttiği gibi işlevi weighted.mean() yerleşik kullanmak eşdeğerdir. Kendi fonksiyonunuzu kullanmak daha hızlı olabilir, ancak yerleşik fonksiyonun kontrol ettiği aynı miktarda hata yapmaz.

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 
İlgili konular