返回包含特定字符串

时间:2017-05-02 10:04:10

标签: r list

我有一个包含字符串的向量列表,我希望R给我另一个包含所有包含某些字符串的向量的列表。 MWE:

list1 <- list("a", c("a", "b"), c("a", "b", "c"))

现在,我想要一个包含所有带有“a”和“b”的向量的列表。因此,新列表应包含两个元素c("a", "b")c("a", "b", "c")

由于list1[grep("a|b", list1)]给了我一个包含“a”或“b”的所有向量的列表,我希望list1[grep("a&b", list1)]做我想做的事,但它没有(它返回了一个长度列表0)。

4 个答案:

答案 0 :(得分:2)

这应该有效:

test <- list("a", c("a", "b"), c("a", "b", "c"))
test[sapply(test, function(x) sum(c('a', 'b') %in% x) == 2)]

答案 1 :(得分:2)

尝试purrr::keep

library(purrr)
keep(list1, ~ all(c("a", "b") %in% .))

答案 2 :(得分:1)

我们可以使用Filter

Filter(function(x) all(c('a', 'b') %in% x), test)
#[[1]]
#[1] "a" "b"

#[[2]]
#[1] "a" "b" "c"

答案 3 :(得分:1)

grepl的解决方案:

> list1[grepl("a", list1) & grepl("b", list1)]
[[1]]
[1] "a" "b"

[[2]]
[1] "a" "b" "c"