按列表中给出的确切名称的值进行过滤(dplyr)

时间:2018-02-27 18:41:03

标签: r dplyr

我有以下数据。

> dat
# A tibble: 12 x 2
   id    name 
   <chr> <chr>
 1 1     a    
 2 1     b    
 3 1     a    
 4 2     a    
 5 2     b    
 6 2     c    
 7 2     b    
 8 3     a    
 9 3     b    
10 3     c    
11 3     d    
12 3     d   

我想仅按以下列表过滤

set <- NULL
set$names <- c("a","b","c")

所选的ID是那些包含列表中名称的名称。

因此,结果只会选择2,如下所示:

> dat
# A tibble: 12 x 2
   id    name 
   <chr> <chr>
 4 2     a    
 5 2     b    
 6 2     c    
 7 2     b    

以下是便于复制的数据:

dat <- tribble(
  ~id, ~name,
  1, "a",
  1, "b",
  1, "a",
  2, "a",
  2, "b",
  2, "c",
  2, "b",
  3, "a",
  3, "b",
  3, "c",
  3, "d",
  3, "d"
)

我想得到以下结果。

2 个答案:

答案 0 :(得分:2)

我不确定这是你想要的

dat %>%
  group_by(id) %>%
  filter(all(set$name %in% name) & all(name %in%set$name))



# A tibble: 4 x 2
     id  name
  <dbl> <chr>
1     2     a
2     2     b
3     2     c
4     2     b

答案 1 :(得分:2)

怎么样:

group_by(dat, id) %>% filter(setequal(name, set$names))

这会过滤掉名称列和set$names不包含相同元素但允许重复的所有组。