Как вычислить взвешенное среднее в R?

r

34545 просмотра

2 ответа

Как вычислить взвешенное среднее в 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.

Автор: Frank Источник Размещён: 12.11.2019 09:57

Ответы (2)


31 плюса

Используйте weighted.mean:

> weighted.mean(z$size, z$count)
[1] 4
Автор: Frank Размещён: 12.06.2012 12:06

21 плюса

Похоже, вы уже знаете, как рассчитать это, просто нужно подтолкнуть в правильном направлении, чтобы реализовать это. Так как 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
Автор: Chase Размещён: 12.06.2012 12:18
Вопросы из категории :
32x32