【发布时间】:2018-09-27 07:55:06
【问题描述】:
我想根据count过滤n个最大的组,然后对过滤后的dataframe做一些计算
这是一些数据
Brand <- c("A","B","C","A","A","B","A","A","B","C")
Category <- c(1,2,1,1,2,1,2,1,2,1)
Clicks <- c(10,11,12,13,14,15,14,13,12,11)
df <- data.frame(Brand,Category,Clicks)
|Brand | Category| Clicks|
|:-----|--------:|------:|
|A | 1| 10|
|B | 2| 11|
|C | 1| 12|
|A | 1| 13|
|A | 2| 14|
|B | 1| 15|
|A | 2| 14|
|A | 1| 13|
|B | 2| 12|
|C | 1| 11|
这是我的预期输出。我想按计数过滤掉两个最大的品牌,然后找到每个品牌/类别组合中的平均点击次数
|Brand | Category| mean_clicks|
|:-----|--------:|-----------:|
|A | 1| 12.0|
|A | 2| 14.0|
|B | 1| 15.0|
|B | 2| 11.5|
我认为可以用这样的代码实现(但不能)
df %>%
group_by(Brand, Category) %>%
top_n(2, Brand) %>% # Largest 2 brands by count
summarise(mean_clicks = mean(Clicks))
编辑:理想的答案应该能够用于数据库表以及本地表
【问题讨论】:
-
您可能想明确您打算使用的 DBMS,并非所有 DBMS 都支持窗口函数,
dbplyr可能需要它们进行某些翻译。我相信@Ronak 的答案应该适用于支持窗口函数但由于add_count而对其他人失败的数据库,解决方法是将子查询分组和计数,将其加入原始查询并继续。 -
实际上@Paul 的解决方案可能会立即起作用,因为它似乎就是这样做的