2016-04-07 16 views
0

içinde belirli bir dizgede gerçekleşip gerçekleşmediğini kontrol edin Bir sütunda belirli bir kelimenin bulunup bulunmadığını görmek istiyorum. Herhangi bir büyük harf olabilir ve başlangıç ​​veya bitiş veya ortada olabilir. Bunu yapmayı nasıl yaparım? Düzenli ifadelere ve grep'e bakmayı denedim() ama takılıyorum. Örneğin, bir değer sütununa ve arzu ettiğim bir yanıta sahibim. "Köpek" kelimesini kontrol etmek istiyorum. "Dogg" ya da "doggy" gibi herhangi bir arkadaki saplarla "köpek" bulunduğunda "1" istiyorum, ama "köpek" başka bir şey tarafından önceden alınıyorsa "1" istemiyorum.Belirli bir dizginin R

 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") 

cevap

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

Yoksa Değerin kendisini isterseniz: (harf büyüklüğüne duyarlı

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

bir kelime sınırı ile eşleşen \b regex yüzden, \bdog (başlangıç ​​veya bir kelime olmayan yakalama sonu) , kaçtı) bir kelimenin başlangıcında 'köpek' ile eşleşir. Daha fazla kullanım durumu istiyorsanız, bunları belirtmeniz gerekir.

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 
İlgili konular