对于示例数据:
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/