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
Dlaczego upadły? – Frank
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
@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. –