如何在 R tibble 中找到至少一半元素中共有的元素

How to find elements common in at least half of elements in an R tibble

我有一些价值观:

raw = tibble(
      labels = rep(rep(1:4,each=3),2),
       group = rep(c("A","B"), each=12),
       value = c(1,2,3,3,4,5,6,7,2,2,12,1,7,3,3,3,4,5,6,3,2,2,7,1))

我想 select 为每个组 A 和 B seperatlty 在至少一半的标签中使用公共值。结果可能是

Res = tibble(group = c("A","B"),
       value = c("1,2,3","2,3,7"))

如果我能找到一个灵活的函数来对至少 1/3 的标签执行相同的 selection,那将会很有帮助。

这是一个选项,我们按 'group'、'value' 进行分组,获取不同 'labels' 的数量,然后按 'group' 和 filter 'n' 大于或等于不同 'labels' 的数量乘以 2 即 50% 的行,得到 'group' 的 distinct 行,'value'

library(dplyr)
raw %>%
   group_by(group, value) %>%
   mutate(n = n_distinct(labels)) %>%
   group_by(group) %>% 
   filter(n >= n_distinct(labels)/2) %>% 
   select(-n) %>%
   ungroup %>% 
   distinct(group, value)
# A tibble: 6 x 2
#  group value
#  <chr> <dbl>
#1 A         1
#2 A         2
#3 A         3
#4 B         7
#5 B         3
#6 B         2