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