删除重复的值,并优先从最大的组中删除

时间:2019-04-15 10:54:05

标签: r dplyr duplicates

我有一个小标题,要删除具有重复值的行,但希望从最大的组中删除该行。

示例数据:

(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可以考虑组的大小?

2 个答案:

答案 0 :(得分:2)

那呢:

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

答案 1 :(得分:0)

这是什么:

 tb <- tibble(group = rep(LETTERS[1:3], times = 3:1),
 value = c(4,2,6,1,2,1))

group value
  <chr> <dbl>
1 A         4
2 A         2
3 A         6
4 B         1
5 B         2
6 C         1

tb %>% group_by(value) %>% filter(group == max(group))

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

tb <- tibble(group = rep(LETTERS[1:3], times = 3:1),
              value = c(4,2,1,1,2,1))

 group value
  <chr> <dbl>
1 A         4
2 A         2
3 A         1
4 B         1
5 B         2
6 C         1

tb %>% group_by(value) %>% filter(group == max(group))

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