【问题标题】:How to compute weighted mean in R?如何计算R中的加权平均值?
【发布时间】:2012-06-14 21:14:31
【问题描述】:

如何计算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 中的加权平均值”会返回 weighted.mean 的帮助页面作为第一个结果。
  • @Frank 将鼠标悬停在 Q 旁边的投票计数下方的向下三角形上。工具提示说:“这个问题没有显示任何研究工作;...”。鉴于这里有人已经在这里提出了一个非常相似的 Q,可以通过搜索轻松找到,并且 Google 搜索会将您带到正确的答案,这可能就是您获得 Downvotes 并关闭 Q 的原因。
  • 另一个问题似乎有所不同,OP 正在询问加权方差,因为他在对已接受答案的评论中澄清了这一点:> 是的,我正在寻找加权方差。不是意思 – 2012 年 4 月 8 日 2:26 亚历克斯
  • 投票重新开放;正如@ChrisSnow 所指出的,other question 似乎有所不同,并且无论如何 比这个更不清晰。

标签: r


【解决方案1】:

使用weighted.mean:

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

【讨论】:

    【解决方案2】:

    您似乎已经知道如何计算它,只需要朝着正确的方向轻推即可实现它。由于 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
    

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-06
      • 1970-01-01
      相关资源
      最近更新 更多