Есть много способов. Это один из них:
Шаг 1 : определить шаблон, который вы хотите сопоставить с регулярным выражением:
pattern <- "(1|2)\\d{3}"
Шаг 2 : определить функция для извлечения сырых совпадений:
extract <- function(x) unlist(regmatches(x, gregexpr(pattern, x, perl = T)))
Шаг 3 : применить функцию к вашим данным, например, id_1
:
extract(id_1)
[1] "2013" "2014" "2016" "1990"
Вот еще один способ , на самом деле проще;)
Используется функция str_extract
из пакета stringr
. Таким образом, вы устанавливаете пакет и активируете его:
install.packages("stringr")
library(stringr)
и используете str_extract
, чтобы вытащить свои спички:
years <- str_extract(id_1,"(1|2)\\d{3}")
years
[1] "2013" "2014" "2016" "1990"
РЕДАКТИРОВАТЬ:
Если не каждая строка содержит совпадение и вы хотите сохранить длину векторов / столбцов, вы можете использовать ifelse
, чтобы проверить, находит ли регулярное выражение совпадение и, где его нет, поставить NA
.
Например, если ваши данные похожи на это (обратите внимание на две добавленные строки, которые не содержат лет):
id_3 <- c("regkfg_2013", "fsgdf-2014", "f2016sghsg", "gjdg1990_3759", "gbgbgbgb", "hnhna25")
, вы можете настроить тест ifelse
следующим образом:
years <- ifelse(grepl("(1|2)\\d{3}", id_3), str_extract(id_3,"(1|2)\\d{3}"), NA)
years
[1] "2013" "2014" "2016" "1990" NA NA