我想根据数量筛选出前n个最大组,并在筛选后的数据框上进行一些计算。
这里是一些数据
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))
编辑:理想的答案应该适用于数据库表以及本地表格
dbplyr
在某些翻译中可能需要它们。我相信@Ronak的答案应该适用于支持窗口函数的DB,但由于add_count
,在其他DB上会失败,解决方法是在子查询中进行分组和计数,将其加入到原始查询中并继续进行。 - moodymudskipper