如何在dplyr中查找组中的前N个降序值

Nei*_*eil 4 r

我在R中有一个以下数据帧

  Serivce     Codes
   ABS         RT
   ABS         RT
   ABS         TY
   ABS         DR
   ABS         DR
   ABS         DR
   ABS         DR
   DEF         RT
   DEF         RT
   DEF         TY
   DEF         DR
   DEF         DR
   DEF         DR
   DEF         DR
   DEF         TY
   DEF         SE
   DEF         SE
Run Code Online (Sandbox Code Playgroud)

我想要的是服务明智的代码计数降序

  Serivce     Codes    Count
   ABS         DR        4
   ABS         RT        2 
   ABS         TY        1
   DEF         DR        4
   DEF         RT        2
   DEF         TY        2  
Run Code Online (Sandbox Code Playgroud)

我正在关注r

df%>% 
group_by(Service,Codes) %>% 
summarise(Count = n()) %>%
top_n(n=3,wt = Count) %>% 
arrange(desc(Count)) %>% 
as.data.frame()   
Run Code Online (Sandbox Code Playgroud)

但是,它并没有给我什么意图.

akr*_*run 6

我们可以试试 count/arrange/slice

df1 %>% 
   count(Service, Codes) %>%
   arrange(desc(n)) %>% 
   group_by(Service) %>% 
   slice(seq_len(3))
# A tibble: 6 x 3
# Groups:   Service [2]
#  Service Codes     n
#    <chr> <chr> <int>
#1     ABS    DR     4
#2     ABS    RT     2
#3     ABS    TY     1
#4     DEF    DR     4
#5     DEF    RT     2
#6     DEF    SE     2
Run Code Online (Sandbox Code Playgroud)

在OP的代码中,我们也需要arrange"服务".正如@Marius在评论中所说,top_n如果存在联系,将包括更多行数.一种选择是使用"服务"和slice(如上所示)进行第二次分组,或者在分组后,我们可以filter

df1 %>% 
  group_by(Service,Codes) %>%
  summarise(Count = n()) %>%
  top_n(n=3,wt = Count)  %>%
  arrange(Service, desc(Count)) %>%
  group_by(Service) %>%
  filter(row_number() <=3)
Run Code Online (Sandbox Code Playgroud)