str_detect()

  文字列の有無を検索する

str_detect(string, pattern)変数stringに該当するpattern文字列が入っているかどうかを調べる関数。TRUE/FALSEが返される。

通常、patternの部分は一単語だが、複数入れたり条件式にしたい場合がある。

単純な例:patternに検索したい言葉をあてる

> str_detect("今日はよいお天気です", "晴れ")
[1] FALSE
> str_detect("今日はよいお天気です", "天気")
[1] TRUE

複数の言葉で条件を入れたい時::AND条件 OR条件を使い分ける

> str_detect("明日は晴れか曇りかわかりません", "晴れ, 雨")    #AND条件はカンマで区切る
[1] FALSE
> str_detect("明日は晴れか曇りかわかりません", "晴れ, 曇り")  #AND条件はカンマで区切る
[1] FALSE
> str_detect("明日は晴れか曇りかわかりません", "晴れ|曇り") #OR条件はパイプでつなぐ
[1] TRUE

さらに複雑なパターン::正規表現を使う

> string = c("金が増えた", "金が減った", "腹が減った", "金メダルが増えた", "金メダイが食いたい")
> str_detect(string, pattern = "金.*(増|減)")
[1]  TRUE  TRUE FALSE  TRUE FALSE
> str_detect(string, pattern = "金メ.*(増|減)")
[1] FALSE FALSE FALSE  TRUE FALSE
> str_detect(string, pattern = "金が.*(増|減)")
[1]  TRUE  TRUE FALSE FALSE FALSE
以下は松澤教授による
> string = c("金が増えた", "カネを増やす", "金が減った", "腹が減った", "金メダルが増えた", "金メダイが食いたい")
> w1 = c("金", "カネ")
> w2 = c("増", "減")
> pattern1 = paste0("(", paste0(w1, collapse = '|'), ".*", paste0(w2, collapse = '|'),")") 
> str_detect(string, pattern1)
[1] TRUE TRUE TRUE TRUE TRUE TRUE
> w1 = c("が", "金")
> pattern1 = paste0("(", paste0(w1, collapse = '|'),")", ".*", "(", paste0(w2, collapse = '|'),")") 
> pattern1
[1] "(が|金).*(増|減)"
> str_detect(string, pattern1)
[1]  TRUE FALSE  TRUE  TRUE  TRUE FALSE
「.*」は任意の文字数列を表現する
ベテランからのアドバイス

凝った正規表現はロジックの可読性が悪いので、複数に分けてcodingしたほうがよい。