当每组 n 不同时,过滤分组数据帧的 n 行

cyl*_*ude 3 r dplyr

我想为数据框的每组选择不同的行数。我还没有找到一种优雅的方法来使用 dplyr 来做到这一点。要为每个组挑选相同数量的行,我可以像这样完成:

library(dplyr)

iris %>% 
    group_by(Species) %>%
    arrange(Sepal.Length) %>%
    top_n(2)
Run Code Online (Sandbox Code Playgroud)

但我希望能够引用另一个表,其中包含我想要的每个组的行数,如下所示的示例表:

top_rows_desired <- data.frame(Species = unique(iris$Species),
    n_desired = c(4,2,5))
Run Code Online (Sandbox Code Playgroud)

akr*_*run 5

我们可以按“物种”对“iris”和“top_rows_desired”进行操作left_join,按“物种”分组,slice对“n_desired”sequence进行分组first,并使用 删除“n_desired”列select

left_join(iris, top_rows_desired, by = "Species") %>%
                     group_by(Species) %>% 
                     arrange(desc(Sepal.Length)) %>%
                     slice(seq(first(n_desired))) %>%
                     select(-n_desired)
Run Code Online (Sandbox Code Playgroud)