Использование stringr
для извлечения цифр, а затем просто преобразовать результат в числовой вектор:
library(dplyr)
library(stringr)
sample.df <- data.frame(E = c(
"ABCDEF50GH",
"ABCDEF600GH",
"ABCDEF50GH",
"ABCDEF1000GH"
),
stringsAsFactors = FALSE)
sample.df <- sample.df %>%
mutate(E_numbers = str_extract_all(E, "[[:digit:]]+")) %>%
mutate(E_numbers = unlist(E_numbers)) %>%
mutate(E_numbers = as.numeric(E_numbers))
> sample.df
E E_numbers
1 ABCDEF50GH 50
2 ABCDEF600GH 600
3 ABCDEF50GH 50
4 ABCDEF1000GH 1000
str_extract_all()
возвращает список, который может быть сложно обработать, поэтому я использую unlist()
прочеечем это, это должно быть просто:)
Примечание: разница между str_extract_all()
и str_extract()
в том, что str_extract()
будет ловить только первое число в ваших строках.Таким образом, если одна из строк в E
будет "ABCDEF600G400H"
, str_extract_all()
вернет числа 600
и 400
, а str_extract()
вернет 600
.Не уверен, что является предпочтительным в вашем случае.
Редактировать: Если вы хотите извлечь только последнее число в "ABCDEF600G400H"
, мы можем использовать пакет stringi
вместо stringr
:
library(dplyr)
library(stringi)
sample.df <- data.frame(
E = c(
"ABCDEF50GH",
"ABCDEF600GH",
"ABCDEF50GH",
"ABCDEF1000GH",
"ABCDEF600G400H"
), stringsAsFactors = FALSE)
sample.df <- sample.df %>%
mutate(E_numbers = stri_extract_last_regex(E, "[[:digit:]]+")) %>%
mutate(E_numbers = unlist(E_numbers)) %>%
mutate(E_numbers = as.numeric(E_numbers))
> sample.df
E E_numbers
1 ABCDEF50GH 50
2 ABCDEF600GH 600
3 ABCDEF50GH 50
4 ABCDEF1000GH 1000
5 ABCDEF600G400H 400