Как я могу использовать обратные ссылки с `grep` в R?

Я ищу элегантный способ возврата обратных ссылок с помощью регулярных выражений в R. Le me explain:

Допустим, я хочу найти строки, которые начинаются с имени месяца:

x <- c("May, 1, 2011", "30 June 2011")
grep("May|^June", x, value=TRUE)
[1] "May, 1, 2011"

Это работает, но я действительно хочу изолировать месяц (т.е. "май", а не всю совпадающую строку.

Таким образом, можно использовать gsub, чтобы вернуть обратную ссылку, используя параметр replace. Но в этом есть две проблемы:

  1. нужно обернуть образец внутрь ".*(pattern).*)" так, чтобы подстановка происходила по всей строке.
  2. Вместо того, чтобы возвращать NA для несопоставимых строк, gsub возвращает исходную строку. Это явно не то, чего я хочу:

Код и результаты:

gsub(".*(^May|^June).*", "\\1", x) 
[1] "May"          "30 June 2011"

Я, наверное, мог бы кодировать обходной путь, делая всевозможные дополнительные проверки, но это быстро становится очень запутанным.

Чтобы быть кристально ясным, желаемый результат должен быть:

[1] "May"          NA

Есть ли простой способ достичь этого?

15
задан Andrie 1 June 2011 в 10:11
поделиться