2014-10-11 12 views
11

Używam grepl() w R, aby wyszukać, czy w moim tekście znajduje się któryś z następujących Gatunków. Robię to teraz:Użyj grepl, aby przeszukać jeden z wielu podłańcuchów w tekście.

grepl("Action", my_text) | 
grepl("Adventure", my_text) | 
grepl("Animation", my_text) |  
grepl("Biography", my_text) | 
grepl("Comedy", my_text) |  
grepl("Crime", my_text) | 
grepl("Documentary", my_text) | 
grepl("Drama", my_text) | 
grepl("Family", my_text) | 
grepl("Fantasy", my_text) | 
grepl("Film-Noir", my_text) | 
grepl("History", my_text) | 
grepl("Horror", my_text) | 
grepl("Music", my_text) | 
grepl("Musical", my_text) | 
grepl("Mystery", my_text) | 
grepl("Romance", my_text) | 
grepl("Sci-Fi", my_text) | 
grepl("Sport", my_text) | 
grepl("Thriller", my_text) | 
grepl("War", my_text) |  
grepl("Western", my_text) 

Czy istnieje lepszy sposób na napisanie tego kodu? Czy mogę umieścić wszystkie gatunki w tablicy, a następnie użyć w tym celu grepl()?

Odpowiedz

19

Możesz wkleić gatunki razem z separatorem "lub" | i uruchomić to przez grepl jako pojedyncze wyrażenie regularne.

x <- c("Action", "Adventure", "Animation", ...) 
grepl(paste(x, collapse = "|"), my_text) 

Oto przykład.

x <- c("Action", "Adventure", "Animation") 
my_text <- c("This one has Animation.", "This has none.", "Here is Adventure.") 
grepl(paste(x, collapse = "|"), my_text) 
# [1] TRUE FALSE TRUE 
2

Można przechodzić listy lub wektorem gatunków, jak poniżej:

genres <- c("Action",...,"Western") 
sapply(genres, function(x) grepl(x, my_text)) 

Aby odpowiedzieć na to pytanie, jeśli po prostu chcesz wiedzieć, czy any elementem wytypowany wynik będzie można korzystać z funkcji any() .

any(sapply(genres, function(x) grepl(x, my_text))) 

Po prostu, jeśli każdy element ma wartość TRUE, any zwróci TRUE.

+0

To zbliża mnie do tego, czego szukam. Ale dostaję tutaj wartości TRUE/FALSE dla każdego gatunku. Jeśli mam tablicę 20 gatunków, otrzymuję 19 wartości FAŁSZ i 1 wartość PRAWDA, jeśli jeden z gatunków był zawarty w my_text. Chcę uzyskać końcowy wynik tego stwierdzenia 19 FALSE i 1 TRUE przynosi TRUE na końcu. Dostajesz to, co mówię? Jak to zrobić? – user3422637

+0

Robię instrukcję if, aby sprawdzić, czy warunek zwróci true. – user3422637

+0

'any (sapply (...)' –

Powiązane problemy