对于示例数据:

set.seed(2222)
example_data <- data.frame(col1 = 1:15,
                           col2 = 16:30,
                           group = sample(1:3, 15, replace = TRUE))

   col1 col2 group
1     1   16     2
2     2   17     1
3     3   18     3
4     4   19     2
5     5   20     3
6     6   21     1
7     7   22     3
8     8   23     1
9     9   24     3
10   10   25     1
11   11   26     2
12   12   27     2
13   13   28     2
14   14   29     3
15   15   30     3

我想找到记录数量最多的前n个组。

假设我想获得记录数最多的前2个组。在数据中,这将是第3组和第2组:
example_data %>%
  group_by(group) %>%
  summarise(n = n())

# A tibble: 3 x 2
  group     n
  <int> <int>
1     1     4
2     2     5
3     3     6

预期的输出是:
   col1 col2 group
1     1   16     2
2     3   18     3
3     4   19     2
4     5   20     3
5     7   22     3
6     9   24     3
7    11   26     2
8    12   27     2
9    13   28     2
10   14   29     3
11   15   30     3

最佳答案

我们可以使用table来计算每个group的频率,以sort顺序对其进行decreasing,将前2个条目子集化,并使用filter分别分组。

library(dplyr)

example_data %>%
   filter(group %in% names(sort(table(group), decreasing = TRUE)[1:2]))


#   col1 col2 group
#1     1   16     2
#2     3   18     3
#3     4   19     2
#4     5   20     3
#5     7   22     3
#6     9   24     3
#7    11   26     2
#8    12   27     2
#9    13   28     2
#10   14   29     3
#11   15   30     3

您也可以直接在基本R subset中使用它
subset(example_data, group %in% names(sort(table(group), decreasing = TRUE)[1:2]))

关于r - 过滤data.frame中的前n个最大组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56363157/

10-12 17:35