我有一个包含字符串的向量列表,我希望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)。
答案 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"