2016-07-13 12 views
0

У меня есть эти коды:Использование Grep найти письмо без отдельного

x=c('a','a,b','a-c','ab') 
y=c('a') 
grep(y,x,ignore.case = T) 

Результатом является

> grep(y,x) 
[1] 1 2 3 4 

Но я надеюсь, что результат должен быть «1 2 3», один раз «а» разделяется чем-либо или просто «а», за исключением того, что «а» не разделяется, как «аЬ». Спасибо!

+4

Сепараторы не имеют ничего общего с ним. Вы указываете 'grep()' смотреть только на символ «a», и он находит его в каждой строке. –

ответ

3

Добавить границу слова в y:

x=c('a','a,b','a-c','ab') 
y=c('a\\b') 
grep(y,x,ignore.case = T) 
# [1] 1 2 3 
1

Как хочет ОП, чтобы иметь шаблон, который включает в себя не имеющий каких-либо букв следующее «а» ([^a-z]) или (|), это может быть конец строка $.

grep("a([^a-z]|$)", x) 
#[1] 1 2 3 

Или, если мы хотим быть конкретными, что либо знаки препинания ([[:punct:]]) следует «а» или (|) это конец строки, то

grep("a([[:punct:]]|$)", x) 
#[1] 1 2 3