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

library(dplyr)

iris %>%
    group_by(Species) %>%
    arrange(Sepal.Length) %>%
    top_n(2)

但我希望能够引用另一个表,其中包含我想要的每个组的行数,如下所示的示例表:
top_rows_desired <- data.frame(Species = unique(iris$Species),
    n_desired = c(4,2,5))

最佳答案

我们可以用 'iris' 和 'top_rows_desired' 做一个 left_join 'Species',按 'Species' 分组,slice sequencefirst 'n_desired' 并用 select 删除 'n_desired' 列。

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

关于r - 当每个组的 n 不同时,过滤 n 行分组数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38795058/

10-11 18:04