2017-12-01 5 views
0

Ich versuche, einen Weg zu finden, um zu überprüfen, ob eine Liste ein Element enthält, dass sich eine bestimmte Zeichenfolge enthält. eine genaue Übereinstimmung zu finden, ist einfach mit %in%:Überprüfen Sie, ob Zeichenfolge in einer Liste enthalten ist

list1 <- list("a","b","c") 
"a" %in% list1 
[1] TRUE 

Aber es funktioniert nur, wenn das Element identisch ist, dh es ist nicht TRUE zurückgibt, wenn das Element nur die Zeichenfolge enthält:

list2 <- list("a,b","c,d") 
"a" %in% list2 
[2] FALSE 

Gibt es eine Möglichkeit, TRUE für das zweite Beispiel zu generieren? Danke im Voraus.

+5

So etwas wie 'jede (Grepl ("a", fehlenden oder (list2))) '? Oder wenn sie immer durch Komma getrennt ist dann ' "a" % in% fehlenden oder (strsplit (as.character (list2), ""))' –

+0

kommentiert @ Ronak-Schah ‚s Antwort, wenn jedes Element in' list2' ist nur eine einfache Zeichenfolge, 'unlist()' kann weggelassen werden. 'any (grepl (" a ", list2))" sollte tun. –

+0

Ich weiß nichts über r. Aber ich habe diesen Thread finden: https://stackoverflow.com/questions/30180281/how-can-i-check-if-multiple-strings-exist-in-another-string –

Antwort

0

Könnten Sie versuchen, es um Spiegeln und

any(list2 %like% 'a') 

Die any() enthalten ist verwenden, weil ohne sie die Ausgabe: [1] TRUE FALSE

+0

Aus welchem ​​Paket stammt '% like%'? Ich habe das nicht gesehen. – Marius

+0

Aus irgendeinem Grund dachte ich, es sei eine Basisfunktion. Aber es ist nicht. Es ist in data.table – brett

0
library(stringi) 

list2 <- list("a,b","c,d") 

stri_detect_fixed(list2, "a") 
## [1] TRUE FALSE 

stri_detect_fixed(list2, "b") 
## [1] TRUE FALSE 

stri_detect_fixed(list2, "c") 
## [1] FALSE TRUE 

stri_detect_fixed(list2, "d") 
## [1] FALSE TRUE 

stri_detect_fixed(list2, "q") 
## [1] FALSE FALSE 
Verwandte Themen