Один из способов сделать это - использовать функцию stringr
s str_extract
:
Данные:
df <- data.frame(col1 = c("ccd_x29807","ccd_x29807","ccd_x29807","ccd_x20463"))
Решение:
df$col2 <- str_extract_all(df$col1, "(?<=x)\\d+")
Это решение делает использование положительного просмотра назад: эта часть регулярного выражения (?<=x)
воплощает инструкцию «если в строке, которую вы видите слева, - x
», тогда как эта часть регулярного выражения \\d+
соответствует числу, повторяемому один или несколько раз.
Другое решение base R
- через gsub
и обратную ссылку \\1
:
df$col2 <- gsub(".*x(\\d+)", "\\1", df$col1)
В качестве альтернативы, если вы предпочитаете dplyr
:
df$col2 <- df %>%
mutate(col1 = str_extract_all(col1, "(?<=x)\\d+"))
Результат :
df
col1 col2
1 ccd_x29807 29807
2 ccd_x29807 29807
3 ccd_x29807 29807
4 ccd_x20463 20463