文字列からなるベクトル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
パッケージには、他にも関数がある。