【问题标题】:R ddply and weighted meanR ddply 和加权平均值
【发布时间】:2013-06-20 16:42:01
【问题描述】:

我正在尝试在名为 DFA_CMO 的表上计算加权平均值(每个视图的平均查看时间)的聚合。 DFA_CMO 有 5 个维度,其中 Site。

代码如下:

ddply(DFA_CMO,.(Site),summarize, wm = weighted.mean(DFA_CMO$AverageViewingTime, DFA_CMO$Views, ,na.rm=TRUE))

但结果令人失望,因为它显示每个字段的值相同:

              Site       wm
1         Advideum 21.17633
2          bbc.com 21.17633
3       Boursorama 21.17633
4       Canal Plus 21.17633
5     CNN  Network 21.17633
6       EuronewsFR 21.17633
7  invitemedo.com 21.17633
8         Lfddfdse 21.17633
9         Le Monde 21.17633
10     Les Echos 1 21.17633
11     lopinion.fr 21.17633
12          TF1.fr 21.17633
13        ViadeoFR 21.17633
14 WSJ UK - IBM PE 21.17633

这里似乎显示了所有内容的平均值,而每个站点的平均值应该不同。 知道如何获得正确的值吗?

【问题讨论】:

  • 使用summary时,不需要包含data.frame名称...事实上,您不应该。其中有一个隐含的with(...),这意味着您可以引用列名,就好像它们是本地定义的变量一样。
  • 我没有看到DFA_CMO。如果您不能/不想显示真实的表格,请发布您运行代码的表格或类似的版本。还有(但可能只是我)DFA_CMO has 5 dimensions, and Site among them. 是什么意思?

标签: r


【解决方案1】:

不要在对ddply 的调用中传递DFA_CMO$<var_name>。只需传递变量名本身。

ddply(DFA_CMO,.(Site),summarize,
      wm = weighted.mean(AverageViewingTime, views, ,na.rm=TRUE))

原因是通过给出数据框名称,您实际上是在将固定向量传递给加权平均函数,即数据框中所有行的值。如果您只传递列名,ddply 将在与每个组对应的行子集的上下文中评估它们。

【讨论】:

  • 非常感谢Hong的回答和解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多