2014-10-11 20 views
11

metninde birden çok alt dizeden birini aramak için grepl'i kullanın Metmimde aşağıdaki Türlerden herhangi birinin var olup olmadığını aramak için g içinde grepl() öğesini kullanın. Bunu şu anda yapıyorum:Bir metni

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) 

Bu kodu yazmanın daha iyi bir yolu var mı? Bütün türleri bir diziye koyabilir miyim ve sonra bir şekilde grepl() kullanabilir miyim?

cevap

19

Türleri "veya" | ayırıcıyla birlikte yapıştırabilir ve bunu tek bir normal ifade olarak grepl aracılığıyla çalıştırabilirsiniz.

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

İşte bir örnek.

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

Sen olarak aşağıda bir liste veya türlerin vektörü yoluyla döngüsü yapabilirsiniz: Sadece bilmek istiyorum eğer sonucun any eleman DOĞRU ise

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

, sorunuzu cevaplamak için size any() işlevini kullanabilirsiniz . herhangi eleman DOĞRU ise

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

Basitçe, any DOĞRU dönecektir.

+0

Bu, aradığım şeylere yaklaştı. Ama burada aldığım her tür için TRUE/FALSE değerleri. 20 türden oluşan bir dizim varsa, my_text dosyasında türlerden biri varsa, 19 FALSE değeri ve 1 TRUE değeri alırım. Bu sonuca göre 19 FALSE ve 1 TRUE, sonunda TRUE değerini eş anlamlı olarak belirtiyor. Ne dediğimi anladın mı? Bunu nasıl yaparım? – user3422637

+0

Durumun gerçek olup olmadığını görmek için bunun üzerine bir if ifadesi yapıyorum. – user3422637

+0

'any (sapply (...)' –

İlgili konular