我有以下数据。
> 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"
)
我想得到以下结果。
答案 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
不包含相同元素但允许重复的所有组。