使用来自R中dplyr的加权平均值的汇总

时间:2017-03-23 14:46:57

标签: r dplyr

我正在尝试使用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

2 个答案:

答案 0 :(得分:11)

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)

答案 1 :(得分:4)

我找到了解决方案。 由于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))