Извлечение чисел из векторов строк
103444 просмотра
11 ответа
У меня есть строка, как это:
years<-c("20 years old", "1 years old")
Я хотел бы получить только числовой номер из этого вектора. Ожидаемый результат - вектор:
c(20, 1)
Как мне это сделать?
Автор: user1471980 Источник Размещён: 12.11.2019 09:16Ответы (11)
71 плюса
Как насчет
# pattern is by finding a set of numbers in the start and capturing them
as.numeric(gsub("([0-9]+).*$", "\\1", years))
или же
# pattern is to just remove _years_old
as.numeric(gsub(" years old", "", years))
или же
# split by space, get the element in first index
as.numeric(sapply(strsplit(years, " "), "[[", 1))
Автор: Arun
Размещён: 27.01.2013 01:51
49 плюса
Я думаю, что замена - это косвенный способ найти решение. Если вы хотите получить все номера, я рекомендую gregexpr
:
matches <- regmatches(years, gregexpr("[[:digit:]]+", years))
as.numeric(unlist(matches))
Если у вас есть несколько совпадений в строке, они получат их все. Если вас интересует только первый матч, используйте regexpr
вместо, gregexpr
и вы можете пропустить unlist
.
46 плюса
Обновление
Поскольку extract_numeric
устарело, мы можем использовать parse_number
из readr
пакета.
library(readr)
parse_number(years)
Вот еще один вариант с extract_numeric
library(tidyr)
extract_numeric(years)
#[1] 20 1
Автор: akrun
Размещён: 02.08.2016 05:23
31 плюса
Вот альтернатива первому решению Аруна с более простым Perl-подобным регулярным выражением:
as.numeric(gsub("[^\\d]+", "", years, perl=TRUE))
Автор: Andrew
Размещён: 27.01.2013 02:04
19 плюса
17 плюса
stringr
Конвейерное решение:
library(stringr)
years %>% str_match_all("[0-9]+") %>% unlist %>% as.numeric
Автор: Joe
Размещён: 01.10.2016 12:55
15 плюса
Вы также можете избавиться от всех букв:
as.numeric(gsub("[[:alpha:]]", "", years))
Вероятно, это менее обобщенно.
Автор: Tyler Rinker Размещён: 27.01.2013 02:274 плюса
Извлечение чисел из любой строки в начальной позиции.
x <- gregexpr("^[0-9]+", years) # Numbers with any number of digits
x2 <- as.numeric(unlist(regmatches(years, x)))
Извлечение чисел из любой строки НЕЗАВИСИМО от позиции.
x <- gregexpr("[0-9]+", years) # Numbers with any number of digits
x2 <- as.numeric(unlist(regmatches(years, x)))
Автор: sbaniwal
Размещён: 24.12.2016 05:47
2 плюса
После сообщения от Габора Гротендика в списке рассылки r-help
years<-c("20 years old", "1 years old")
library(gsubfn)
pat <- "[-+.e0-9]*\\d"
sapply(years, function(x) strapply(x, pat, as.numeric)[[1]])
Автор: juanbretti
Размещён: 27.04.2016 07:50
1 плюс
Мы также можем использовать str_extract
отstringr
years<-c("20 years old", "1 years old")
as.integer(stringr::str_extract(years, "\\d+"))
#[1] 20 1
Если в строке несколько чисел, и мы хотим извлечь все из них, мы можем использовать, str_extract_all
который в отличие от str_extract
возвращает все числа.
years<-c("20 years old and 21", "1 years old")
stringr::str_extract(years, "\\d+")
#[1] "20" "1"
stringr::str_extract_all(years, "\\d+")
#[[1]]
#[1] "20" "21"
#[[2]]
#[1] "1"
Автор: Ronak Shah
Размещён: 28.08.2019 06:14
0 плюса
Используя пакет unglue мы можем сделать:
# install.packages("unglue")
library(unglue)
years<-c("20 years old", "1 years old")
unglue_vec(years, "{x} years old", convert = TRUE)
#> [1] 20 1
Создано 2019-11-06 пакетом представлением (v0.3.0)
Дополнительная информация: https://github.com/moodymudskipper/unglue/blob/master/README.md
Автор: Moody_Mudskipper Размещён: 06.11.2019 12:08Вопросы из категории :
- regex Learning Regular Expressions
- regex Regex и unicode
- regex Мое регулярное выражение слишком подходит. Как мне это остановить?
- regex Как выполнить подстановку Perl для строки, сохранив оригинал?
- regex Замена n-го экземпляра совпадения с регулярным выражением в Javascript
- regex Как заменить простые URL ссылками?
- regex Python re.sub с флагом не заменяет все вхождения
- regex Как проверить адрес электронной почты в JavaScript
- regex Как экранировать текст для регулярного выражения в Java
- regex Регулярное выражение, которое будет соответствовать объявлению метода Java
- r Как получить доступ к последнему значению в векторе?
- r Пакеты оптимизации для R
- r Есть ли у R такие операторские операции, как Perl qw ()?
- r Библиотека / инструмент для рисования тройных / треугольных графиков
- r Участки без заголовков / надписей в R
- r Расчет скользящей средней
- r Режим Emacs ESS - вкладка для области комментариев
- r Преобразование данных из многих строк во многие столбцы
- r Проверить, содержит ли вектор данный элемент
- r Поиск всех позиций для нескольких элементов в векторе