При анализе и манипулировании данными часто необходимо извлечь числовые значения из строковых полей для выполнения вычислений или дальнейшего анализа. В этой статье будут рассмотрены различные методы R для извлечения чисел из строковых полей, приведены примеры кода для каждого подхода. Независимо от того, являетесь ли вы новичком или опытным пользователем R, это руководство предоставит вам множество методов решения этой распространенной задачи обработки данных.
Метод 1: регулярные выражения (регулярные выражения):
Регулярные выражения – мощный инструмент для сопоставления строк с образцом. В R мы можем использовать пакет stringr
для применения регулярных выражений для извлечения чисел.
library(stringr)
# Example string
text <- "This is a sample string with 1234 and 56.78 numbers."
# Extracting numbers using regex
numbers <- str_extract_all(text, "\\d+\\.?\\d*")
# Output
print(numbers[[1]])
Метод 2. Разделение и фильтрация.
Другой простой подход — разделить строку на отдельные слова или символы, а затем отфильтровать числовые значения.
# Example string
text <- "This is a sample string with 1234 and 56.78 numbers."
# Splitting and filtering
words <- strsplit(text, " ")[[1]]
numbers <- as.numeric(words[grepl("^\\d+\\.?\\d*$", words)])
# Output
print(numbers)
Метод 3. Использование пакета stringi
.
Пакет stringi
предоставляет обширные функции манипулирования строками. Мы можем использовать функцию stri_extract_all_regex()
для извлечения чисел.
library(stringi)
# Example string
text <- "This is a sample string with 1234 and 56.78 numbers."
# Extracting numbers using stringi
numbers <- stri_extract_all_regex(text, "\\d+\\.?\\d*")[[1]]
# Output
print(numbers)
Метод 4. Использование функции gsub()
.
Функция gsub()
позволяет нам заменять определенные шаблоны в строке. Указав регулярное выражение, соответствующее нечисловым символам, мы можем удалить их и извлечь оставшиеся числа.
# Example string
text <- "This is a sample string with 1234 and 56.78 numbers."
# Removing non-numeric characters
numbers <- as.numeric(gsub("[^0-9.]", "", text))
# Output
print(numbers)