web-dev-qa-db-ja.com

grep()/ gsub()を使用して完全一致を見つける方法

string = c("Apple", "apples", "applez")
grep("Apple", string)

これにより、stringの3つの要素すべてのインデックスが得られます。しかし、「Apple」という単語と完全に一致する必要があります(つまり、grep()にインデックス1を返すだけです)。

52
Adrian

単語の境界\bを使用します。これは、単語と単語以外の文字の間を一致させます。

string = c("Apple", "apples", "applez")
grep("\\bapple\\b", string)
[1] 1

または

アンカーを使用します。 ^開始時にアサートします。 $最後にいることを表明します。

grep("^Apple$", string)
[1] 1

正規表現を変数内に保存して、以下のように使用できます。

pat <- "\\bapple\\b"
grep(pat, string)
[1] 1
pat <- "^Apple$"
grep(pat, string)
[1] 1

更新:

paste("^",pat,"$", sep="")
[1] "^Apple$"
string
[1] "Apple"   "Apple:s" "applez" 
pat
[1] "Apple"
grep(paste("^",pat,"$", sep=""), string)
[1] 1
91
Avinash Raj

完全に一致させるには、==を使用するのが最も理にかなっています。さらに、これはgrep()よりも高速であり、明らかにはるかに簡単です。

which(string == "Apple")
# [1] 1
26
Rich Scriven