Используя базовое c регулярное выражение, вы можете удалить все, что не является числом, и применить ifelse()
к префиксу 19 или 20 в зависимости от ситуации:
# Example data
y <- c(
y1 = "AB99",
y2 = "04CD",
y3 = "X90Z",
y4 = "EF09",
y5 = "12GH"
)
# Extract only the number
num <- gsub("\\D", "", y)
paste0(ifelse(num >= "90", "19", "20"), num)
# [1] "1999" "2004" "1990" "2009" "2012"
В качестве альтернативы, работая с целыми числами:
num <- as.integer(gsub("\\D", "", y)) # or as.integer(readr::parse_number(y))
num + ifelse(num >= 90L, 1900L, 2000L)
# [1] 1999 2004 1990 2009 2012