2017-05-02 2 views
1

Ich habe eine Liste von Vektoren, die Strings enthalten, und ich möchte, dass R mir eine andere Liste mit allen Vektoren gibt, die bestimmte Strings enthalten. MWE:Gibt alle Elemente der Liste zurück, die bestimmte Strings enthalten

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

Nun möchte ich eine Liste, die alle Vektoren mit "a" und "b" in die er enthält. Daher sollte die neue Liste zwei Elemente enthalten: und c("a", "b", "c").

list1[grep("a|b", list1)] gibt mir eine Liste aller Vektoren, die entweder "a" oder "b" enthalten, erwartete ich list1[grep("a&b", list1)] zu tun, was ich will, aber es tat es nicht (es gab eine Liste der Länge 0).

Antwort

2

sollte diese Arbeit:

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

eine Variante: 'function (x) all (c ('a', 'b')% in% x)' – jogo

2

purrr::keep

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

versuchen wir Filter

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

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

Eine Lösung mit grepl verwenden:

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

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