首页 > 解决方案 > 删除重复值,优先从最大组中删除

问题描述

我有一个小标题,我想删除具有重复值的行,但偏好从最大组中删除

示例数据:

(tb <- tibble(group = rep(LETTERS[1:3], times = 3:1),
             value = c(4,2,1,1,2,1)))
# A tibble: 6 x 2
  group value
  <chr> <dbl>
1 A         4
2 A         2
3 A         1
4 B         1
5 B         2
6 C         1

这里,值 1 和 2 是重复的。对于 1 的情况,我希望将其从 2 个较大的组(A 和 B)中删除,并保留 C 的值。同样,值 2 的行应该从组 A 中删除。(当组大小相同时,从哪个组中删除该行并不重要。)

期望的结果

# A tibble: 3 x 2
  group value
  <chr> <dbl>
1 A         4
2 B         2
3 C         1

使用tb %>% filter(!duplicated(value))作品删除重复,但不考虑组大小:

实际结果

# A tibble: 3 x 2
  group value
  <chr> <dbl>
1 A         4
2 A         2
3 A         1

删除重复项时是否有一个(简单的)tidyverse 来考虑组大小?

标签: rdplyrduplicates

解决方案


那个怎么样:

tb %>% group_by(group) %>%
  mutate(size = n()) %>% group_by(value) %>%
  filter(size == min(size))

group value  size
  <chr> <dbl> <int>
1 A         4     3
2 B         2     2
3 C         1     1


推荐阅读