过滤R中组(子集)内的内容

智贤

我有这个数据。

group   name
  1     A
  1     A
  1     A
  1     B
  1     C
  2     A
  2     B
  3     A
  3     B
  3     C
  3     D

我想用标准过滤组。例如,我想过滤{A,B,C}中的组。

因为{A,B,C}(组1的唯一组合)在{A,B,C}中,所以将过滤组1。

第2组将被过滤,因为{A,B}在{A,B,C}中

但是,第3组将不会被过滤,因为{A,B,C,D}不是{A,B,C}的子集。

我应该如何处理这个问题?另外,我还有更多标准(即{A,B,C}和{A,C} ...)。

structure(list(group = c(1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3), 
               name = c("A",  "A", "A", "B", "C", "A", "B", "A", "B", "C", "D")), 
               row.names= c(NA, -11L), class = c("tbl_df", "tbl", "data.frame"))
阿克伦

我们可以指定标准向量并执行 group_by filter

stdvec <- c("A", "B", "C")
library(dplyr)
df1 %>%
     group_by(group) %>%
     filter(all(unique(name) %in% stdvec))

及其反面

df1 %>% 
   group_by(group) %>% 
   filter(!all(unique(name) %in% stdvec))

如果向量更多,可能是

stdvec1 <- c("A", "B", "C") 
stdvec2 <- c("A", "C") 
df1 %>%
    group_by(group) %>% 
    filter(all(stdvec2 %in% name) & all(stdvec1 %in% name))

及其反面

df1 %>%
   group_by(group) %>% 
   filter(!(all(stdvec2 %in% name) & all(stdvec1 %in% name)))

或者它可以是unionunique“ name”相比的多个向量中的一个并检查是否all包含(和取反!

df1 %>%
   group_by(group) %>%
   filter(!all(unique(name) %in% union(stdvec1, stdvec2)))

 df1 %>% 
   group_by(group) %>% 
   filter(all(unique(name) %in% union(stdvec1, stdvec2)))

如果有很多vectors,使用reduceunion

library(purrr)
nm1 <- mget(ls(pattern = "^stdvec\\d+$")) %>%
               reduce(union) 
df1 %>%
         group_by(group) %>%
         filter(all(unique(name) %in%  nm1))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章