文字列からなるベクトルstringがあり、ある要素patternがそのベクトルに含まれているかを知りたい。検索したい。
grep( )
grep(pattern,x)関数を使うと、ある文字列patternをxで指定されたstringから検索する。
grep(x=c("美しい","日本","の"),pattern="美") [1] 1
xの1つめの要素"美しい"だけが、patternとマッチ
引数xには文字列のベクトルをとることができるが、patternにベクトルを指定すると、
引数 'pattern' は 1 を超える長さなので、最初の要素だけが使われます というエラーメッセージがでる。
match( )
patternに複数の要素を含むことができる。
match(pattern,string)で、完全一致で検索する。
match(c("美しい","国"),c("美しい","日本","の","美しい")) [1] 1 NA
一致した最初の要素が何番目かを返す。string[1]に一致しているが、[4]は無視。
charmatch( )
文字列がアルファベットだと部分一致で判断する。
charmatch(pattern,string)で、部分一致で検索する。
charmatch(c("m","med","n"), c("mean", "median", "mode")) [1] 0 2 NA
pattern[1]のmは複数ヒットしているので、0になってしまう。
str_detect( )
library(stringr)のstr_detect(string,pattern)関数は、stringとpatternの要素数が同数なら、patternにベクトルを使える。
同数でないときは、patternの最初の要素が使われる。
ベクトルの要素同士で、部分一致しているかどうかの判断ができる。
str_detect(c("美しい","日本","の"),c("美","日本","国")) [1] TRUE TRUE FALSE
is.element( )の場合
ベクトルの要素同士で、完全一致で比較する。%in%でも同じ。
is.element(pattern,string)
is.element(c("美しい","日本","の"),c("美","日本","国")) [1] FALSE TRUE FALSE
まとめ。
grep( ):patternとなる要素が1つの時、部分一致で検索。
match( ):patternとなる要素が複数の時、完全一致で検索。
charmatch( ):patternとなる要素が複数の時、部分一致で検索
is.element( ):patternとなる要素が複数の時、完全一致で検索。
str_detect( ):patternとなる要素が1つの時か、patternとstringの要素の数が同数の時、部分一致で検索。
pmatch( )は宿題。
stringrパッケージには、他にも関数がある。