Вы можете сделать это с помощью sub
и регулярного выражения.
text.var <- c("abd-GEN-eft-na-M-D-BINED-10-XX1","abd-GEN-eft-na-M-D-BINED-2-XX2","abd-GEN-eft-na-M-D-BINED-3-XX1")
id <- c(1,2,3)
number = as.numeric(sub(".*-(\\d+)-.*", "\\1", text.var))
data <- data.frame("id"=id,"text"=text.var, number)
data
id text number
1 1 abd-GEN-eft-na-M-D-BINED-10-XX1 10
2 2 abd-GEN-eft-na-M-D-BINED-2-XX2 2
3 3 abd-GEN-eft-na-M-D-BINED-3-XX1 3
Немного дополнительной детализации
В регулярном выражении -\\d+-
выделяет последовательность цифр в тире.Я поставил круглые скобки вокруг части \ d, чтобы сохранить найденные цифры для получения -(\\d+)-
..*
до и после -(\\d+)-
соответствуют всем остальным символам.Так что sub
заменит всю строку только цифрами.Это дает строки с цифрами.Я использовал as.numeric
, чтобы превратить их в числа, а не в строки.