我想为数据框的每组选择不同的行数。我还没有找到一种优雅的方法来使用 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)
我们可以按“物种”对“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)