[R] grep for multiple pattern?

Keith Jewell keith.jewell at campdenbri.co.uk
Thu Feb 13 17:27:08 CET 2014


On 13/02/2014 15:51, Marc Schwartz wrote:
>
> On Feb 13, 2014, at 8:43 AM, Rainer M Krug <Rainer at krugs.de> wrote:
>
>> Hi
>>
>> I want to search for multiple pattern as grep is doing for a single
>> pattern, but this obviously not work:
>>
>>> grep("an", month.name)
>> [1] 1
>>> grep("em", month.name)
>> [1]  9 11 12
>>> grep("eb", month.name)
>> [1] 2
>>> grep(c("an", "em", "eb"), month.name)
>> [1] 1
>> Warning message:
>> In grep(c("an", "em", "eb"), month.name) :
>>   argument 'pattern' has length > 1 and only the first element will be used
>>>
>>
>> Is there an equivalent which returns the positions as grep is doing, but
>> not using the strict full-string matching of match()?
>>
>> I could obviously do:
>>
>>> unlist( sapply(pat, grep, month.name ) )
>> an em1 em2 em3  eb
>>   1   9  11  12   2
>>
>> but is there a more compact command I am missing?
>>
>> Thanks,
>>
>> Rainer
>
>
> The vertical bar '|' acts as a logical 'or' operator in regex expressions:
>
>> grep("an|em|eb", month.name)
> [1]  1  2  9 11 12
>
>> grep("an|em|eb", month.name, value = TRUE)
> [1] "January"   "February"  "September" "November"  "December"
>
>
> Regards,
>
> Marc Schwartz
>
and if you want your patterns in a vector
 > pat <-c("an", "em", "eb")
 > grep(paste(pat, collapse="|"), month.name)
[1]  1  2  9 11 12




More information about the R-help mailing list