我有一个小标题,要删除具有重复值的行,但希望从最大的组中删除该行。
示例数据:
(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可以考虑组的大小?
答案 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