如何计算加权平均值R?
例如,我有4个元素,其中1个元素的大小(或:长度,宽度等)10和3个元素的大小为2.
> z = data.frame(count=c(1,3), size=c(10,2))
> z
count size
1 1 10
2 3 2
Run Code Online (Sandbox Code Playgroud)
加权平均值是(10 * 1 + 2 * 3) / 4 = 4.
Fra*_*ank 31
用途weighted.mean:
> weighted.mean(z$size, z$count)
[1] 4
Run Code Online (Sandbox Code Playgroud)
Cha*_*ase 22
好像你已经知道如何计算它,只需要在正确的方向上轻推即可实现它.由于R是矢量化的,因此非常简单:
with(z, sum(count*size)/sum(count))
Run Code Online (Sandbox Code Playgroud)
这个with位只会节省打字,相当于sum(z$count*z$size)/sum(z$count)
或者使用内置函数,weighted.mean()正如您所指出的那样.使用您自己的函数可以证明更快,但不会执行与内置函数相同的错误检查.
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
Run Code Online (Sandbox Code Playgroud)