2016-04-07 30 views
0

特定の単語が列に含まれているかどうかを確認したい。これは、大文字で始まり、終わりまたは中間にすることができます。これをどうやって行うのですか?私は正規表現とgrep()を見てみましたが、私は立ち往生しています。特定の文字列が別の文字列内にあるかどうかを確認するR

たとえば、私は値の列と私が望む応答を示しています。私は「犬」という言葉をチェックしたい。 "dogg"や "doggy"のような末尾の幹で "dog"が見つかった場合は "1"が欲しいですが、 "dog"が先行している場合は "1"は欲しくなりません。

 mydf = structure(list(values = structure(c(7L, 4L, 1L, 2L, 3L, 9L, 8L, 
     5L, 6L), .Label = c("1 dog", "2 dog 3", "cats and dogs", "dog", 
     "DOG", "DOGG", "doggy", "no notthisdog", "not a valid value"), class = "factor"), 
     result = c(1, 1, 1, 1, 1, 0, 0, 1, 1)), .Names = c("values", 
     "result"), row.names = c(NA, -9L), class = "data.frame") 

答えて

0
as.integer(grepl('\\bdog',mydf$values,ignore.case=T)); 
## [1] 1 1 1 1 1 0 0 1 1 

それとも、値そのものたい場合:(大文字と小文字を区別し

grep(value=T,'\\bdog',mydf$values,ignore.case=T); 
## [1] "doggy"   "dog"   "1 dog"   "2 dog 3"  "cats and dogs" "DOG"   "DOGG" 
3

単語境界に一致する\b正規表現はそう、\bdogを(起動したり、単語、非キャプチャの終わり) 、エスケープされた)単語の開始時に 'dog'にマッチします。より多くのユースケースが必要な場合は、それらを指定する必要があります。

mfdf$regex <- as.numeric(grepl("\\bdog", mydf$values, ignore.case=TRUE)) 
mydf 
##    values result regex 
## 1    doggy  1  1 
## 2    dog  1  1 
## 3    1 dog  1  1 
## 4   2 dog 3  1  1 
## 5  cats and dogs  1  1 
## 6 not a valid value  0  0 
## 7  no notthisdog  0  0 
## 8    DOG  1  1 
## 9    DOGG  1  1 
関連する問題