Мы можем сопоставить 'YRS', 'MON' с gsubfn
, заменить символы цифрами и eval
uate
library(gsubfn)
unname(sapply(gsubfn("[A-Z]+", list(YRS = "*12 +", MON = "*1"),
df1$col1), function(x) eval(parse(text = x))))
#[1] 17
Или другой вариант - извлечь цифры и сделать сумму или продукты
library(tidyverse)
map_dbl(str_extract_all(df1$col1, "\\d+"), ~ as.numeric(.x) %*% c(12, 1))
#[1] 17
Или мы можем удалить буквы, прочитать их с помощью data.frame и получить сумму продуктов
as.matrix(read.table(text = gsub("[A-Z]+", "", df1$col1),
header = FALSE) )%*% c(12, 1)
Данные
df1 <- data.frame(col1 = "1YRS 5MON", stringsAsFactors = FALSE)