【问题标题】:Using summarise with weighted mean from dplyr in R在 R 中使用 dplyr 的加权平均值汇总
【发布时间】:2017-08-16 05:00:13
【问题描述】:

我正在尝试使用 dplyr 整理数据集。我的变量包含百分比和简单的值(在本例中为页面浏览量和跳出率)。我试着用这种方式总结它们:

require(dplyr)
df<-df%>%
   group_by(pagename)%>%
   summarise(pageviews=sum(pageviews), bounceRate= weighted.mean(bounceRate,pageviews))

但这会返回:

 Error: 'x' and 'w' must have the same length

我的数据集在页面浏览量和跳出率中都没有任何 NA。 我不确定我做错了什么,也许summarise() 不适用于weighted.mean()

编辑

我添加了一些数据:

### Source: local data frame [4 x 3]

###               pagename bounceRate pageviews
                    (chr)      (dbl)     (dbl)
###1                url1   72.22222      1176
###2                url2   46.42857       733
###3                url2   76.92308       457
###4                url3   62.06897       601

【问题讨论】:

  • 请提供一些数据。

标签: r dplyr


【解决方案1】:

summarize() 命令按照变量在命令中出现的顺序替换变量,因此因为您正在更改综合浏览量的值,所以在 weighted.mean 中使用了该新值。使用不同的名称更安全

df %>%
   group_by(pagename)%>%
   summarise(pageviews_sum = sum(pageviews), 
      bounceRate_mean = weighted.mean(bounceRate,pageviews))

如果你真的想要,你可以在之后重命名

df %>%
   group_by(pagename) %>%
   summarise(pageviews_sum = sum(pageviews), 
      bounceRate_mean = weighted.mean(bounceRate,pageviews)) %>% 
   rename(pageviews = pageviews_sum, bounceRate = bounceRate_mean)

【讨论】:

  • 只需反转汇总中的计算顺序就足够了:df %&gt;% group_by(pagename)%&gt;% summarise(bounceRate = weighted.mean(bounceRate,pageviews), pageviews=sum(pageviews))
【解决方案2】:

我找到了解决方案。 由于summarise(pageviews=sum(pageviews) 是在之前 bounceRate= weighted.mean(bounceRate,pageviews) 评估的,pageviews 的长度减少了,因此比bounceRate 短,这会触发错误。

解决方法很简单,切换它们即可:

require(dplyr)
df<-df%>%
  group_by(pagename)%>%
  summarise(bounceRate= weighted.mean(bounceRate,pageviews),pageviews=sum(pageviews))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 2017-09-22
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多