の加重平均を計算するにはどうすればよい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
加重平均は(10 * 1 + 2 * 3) / 4 = 4
です。
の加重平均を計算するにはどうすればよい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
加重平均は(10 * 1 + 2 * 3) / 4 = 4
です。
使用weighted.mean
:
> weighted.mean(z$size, z$count)
[1] 4
あなたはすでにこれを計算する方法を知っているようです、それを実装するために正しい方向に微調整する必要があります。Rはベクトル化されているため、これは非常に簡単です。
with(z, sum(count*size)/sum(count))
この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