2017-08-01 5 views
2

私はgreplを使ってテキスト内のパターンを検索しようとしています。問題は、私のパターンが名前のリストであり、テキストが同じ長さのテキストのリストでもあるということです。私は、各行を行き来し、対応するテキストで指定された名前を検索するループを構築したいと考えています。明快すべての行でgreplを使用するには?

ため

編集したがって、たとえば、このデータに:

pat <- c("mary", "john", "anthony") 
text <- c("This is a long text about anthony", "This is another long text about john", "This is a final text about mary"). 

私は、最初のテキストで検索"mary"をしたいと思いますし、2番目で"john"、そして最後で"anthony"三つ目。あなたの新しいサンプル・データで

+0

を使用することです。 – Abdou

+0

ありがとう!私は前にこの答えを見てきましたが、それは私の問題を解決していません。私は自分自身をより良く説明することができます。私はテキスト内のすべての名前を検索したくない。対応するテキストの名前は1つだけである。たとえば、このデータでは、pat < - c( "mary"、 "john"、 "anthony") text < - c( "これはanthonyに関する長いテキストです"、 "これはJohnの別の長いテキストです" 、 "これは最終的なメアリーテキストです")。私は最初のテキストで "mary"を検索し、次に2番目に "john"、3番目に "anthony"を検索したいと思います。 – PhiSo

+0

質問を編集してその説明を追加してください。人々があなたを助けやすくなります。 – Abdou

答えて

3

、ヨーヨーを行うことができます:

pat <- c("mary", "john", "anthony") 
text <- c("This is a long text about anthony", "This is another long text about john", "This is a final text about mary") 

sapply(1:length(pat), function(x) grepl(pat[x],text[x])) 

返します

[1] FALSE TRUE FALSE 

・ホープ、このことができます。

+1

これは役に立ちます、ありがとうございます。 sapply(1:length(pat)、function(x)grepl(pat [x]、text [x]、ignore.case = TRUE))の引数 "ignore.case = TRUE"を追加しました。大文字と小文字の両方の名前。 – PhiSo

4
pat <- c("mary", "john", "anthony") 
text <- c("This is a long text about anthony", "This is another long text about john", "This is a final text about mary") 

Mapまたはmapply機能がこれを行います:

Map(grepl,pat,text) 

または

mapply(grepl,pat,text) 

(自動的に簡素化)(これはあなたがunlistができるリストを返します)または

`|
n <- length(pat) 
res <- logical(n) 
for (i in seq(n)) { 
    res[i] <- grepl(pat[i],text[i]) 
} 
+0

ニースの解決策+1 – Florian

+0

ありがとう! mapply版では、どのように "ignore.case = TRUE"引数を追加できますか?いくつかのテキストでは、大文字と小文字の区別があるため、名前が必要です。 – PhiSo

+1

MoreArgsパラメータでmapplyのパラメータを追加できます: 'mapply(grepl、pat、text、MoreArgs = list(ignore.case = TRUE))'。 – Florian

0

別の方法としては、` grepl( "")、テキスト、ignore.case = TRUE paste0(パット、崩壊=)試してみてくださいVectorize

Vectorize(grepl)(pattern = pat, x = text, ignore.case = TRUE) 
# mary john anthony 
# FALSE TRUE FALSE 
関連する問題