R 删除重复值,首选从最大组中删除

R 删除重复值,首选从最大组中删除,r,dplyr,duplicates,R,Dplyr,Duplicates,我有一个tibble,我想删除具有重复值的行,但首选从最大的组中删除 示例数据: (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

我有一个tibble,我想删除具有重复值的行,但首选从最大的组中删除

示例数据:

(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
在删除重复项时,是否有一个(简单的)考虑组大小的tidyverse?

这是怎么回事:

 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
tb%group\u by(value)%%>%filter(group==max(group))
组值
1 A 4
2 A 6
3 B 2
4 C 1
tb%group_by(值)%%>%filter(组==最大值(组))
组值
1 A 4
2 B 2
3 C 1
这个怎么办:

 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
tb%group\u by(value)%%>%filter(group==max(group))
组值
1 A 4
2 A 6
3 B 2
4 C 1
tb%group_by(值)%%>%filter(组==最大值(组))
组值
1 A 4
2 B 2
3 C 1
怎么样:

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

tb%>%groupby(group)%>%
按(值)%%>%更改(大小=n())%%>%
过滤器(大小==最小值(大小))
组值大小
1 A 4 3
2B22
3 C 1
怎么样:

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

tb%>%groupby(group)%>%
按(值)%%>%更改(大小=n())%%>%
过滤器(大小==最小值(大小))
组值大小
1 A 4 3
2B22
3 C 1

如果A有4,2,1,1,1,1,B有5,2,2,那么结果应该是什么?也就是说,最初A组更大,但如果我们先去掉1,那么在考虑去掉2时B会更大。在这种情况下,删除的数字顺序也开始起作用,因此可能只有初始大小才起作用?@JuliusVainora说得很好。我的数据在一个组中不包含任何重复项,重复项的总量是如果a有4,2,1,1,1,1,1,B有5,2,2,那么结果应该是什么?也就是说,最初A组更大,但如果我们先去掉1,那么在考虑去掉2时B会更大。在这种情况下,删除的数字顺序也开始起作用,因此可能只有初始大小才起作用?@JuliusVainora说得很好。我的数据在一个组中不包含任何重复项,并且重复项的总数量是group_by(value)是一个好主意,但是在我的情况下,当我有不同的组名时,这种解决方案不起作用,因为这种硬代码从哪些组中执行删除(而不是实际检查它们的大小)。例如,
tb可能不起作用?tb%%>%group_by(group)%%>%add_tally()%%>%group_by(value)%%>%filter(n==min(n))group_by(value)是一个好主意,但在我的情况下,当我有不同的组名时,这种解决方案不起作用,因为这种硬代码从哪些组中执行删除操作(而不是实际检查它们的大小)。例如,
tb可能不起作用?Tb%> %Group~(组)%> %AdjyTalyAy()%%GroupBy(value)%%%过滤器(n=min(n))BTW,您可以考虑在最后一行中使用<代码>切片(Min(size))< /C> >代替<代码>过滤器>代码。这样做有没有像您建议的那样的优势?至少您不必重复“size”变量名,但我不知道有什么性能提升。在本例中,变量仅由4个字符组成,但在其他情况下,我认为我提出的方法最终会更简洁。这是真的。谢谢你的意见!那很好用!合并后,我使用了这个解决方案:<代码> Tb%> %AddioCube(组)%> %GroupBy(value)%%Sub(Min(n)) BTW,您可以考虑在最后一行中使用<代码>切片(Min(size))< /C> >代替<代码>过滤器>代码。这样做有没有像您建议的那样的优势?至少您不必重复“size”变量名,但我不知道有什么性能提升。在本例中,变量仅由4个字符组成,但在其他情况下,我认为我提出的方法最终会更简洁。这是真的。谢谢你的意见!那很好用!结合起来,我使用了这个解决方案:
tb%%>%add\u count(group)%%>%group\u by(value)%%>%slice(which.min(n))