2017-05-17 16 views
0

私はこの質問に対してPython/Javaのソリューションしか見つかりませんでした。文字列に単語のリストからn個以上の単語が含まれていないか確認してください。R

私は、プレス記事とそれに対応する日付のdata.frameを持っています。 さらに、各記事をチェックしたいキーワードのリストがあります。

df <- data.frame(c("2015-05-06", "2015-05-07", "2015-05-08", "2015-05-09"), 
       c("Articel does not contain a key word", "Articel does contain the key word revenue", "Articel does contain two keywords revenue and margin","Articel does not contain the key word margin")) 
colnames(df) <- c("date","article") 

key.words <- c("revenue", "margin", "among others") 

私だけの単語のいずれかが記事に含まれているかどうかを確認したい場合、私は、素敵な解決策を考え出した:

article.containing.keyword <- filter(df, grepl(paste(key.words, collapse="|"), df$article)) 

これはうまく動作しますが、私は実際に探していますどのようなたとえば、記事でフィルタで選択するには少なくともn = 2個のキーワードを含める必要があります。たとえば、記事に「フィルタリングするには少なくともn個の単語を含める必要があります」というしきい値を設定できる解決策です。所望の出力のように希望:

date  article 
3 2015-05-08 Articel does contain two keywords revenue and margin 
+1

'rowSums(sapply(key.words 、grepl、df $ article))> = 2'? –

+0

@docendo discimusあなたのソリューションは私にとってもうまく機能します! – Constantin

答えて

1

あなたはstringr::str_countを使用することができます。

str_count(df$article, paste(key.words, collapse="|")) 
[1] 0 1 2 1 

この方法をフィルタリングするために翻訳することができること:

article.containing.keyword <- dplyr::filter(df, str_count(df$article, paste(key.words, collapse="|")) >= 2) 
     date            article 
1 2015-05-08 Articel does contain two keywords revenue and margin 
関連する問題