140 votes

Extraction de nombres à partir de vecteurs de chaînes de caractères

J'ai une chaîne comme ça :

years<-c("20 years old", "1 years old")

Je voudrais grep seulement le nombre numérique de ce vecteur. La sortie attendue est un vecteur :

c(20, 1)

Comment dois-je m'y prendre ?

24voto

Joe Points 2572

A stringr solution pipelinée :

library(stringr)
years %>% str_match_all("[0-9]+") %>% unlist %>% as.numeric

18voto

Tyler Rinker Points 27607

Vous pourriez aussi vous débarrasser de toutes les lettres :

as.numeric(gsub("[[:alpha:]]", "", years))

Il est probable que cela soit moins généralisable.

7voto

sbaniwal Points 92

Extrait les nombres de n'importe quelle chaîne de caractères à la position de départ.

x <- gregexpr("^[0-9]+", years)  # Numbers with any number of digits
x2 <- as.numeric(unlist(regmatches(years, x)))

Extraire des chiffres de n'importe quelle chaîne de caractères INDÉPENDANTE de la position.

x <- gregexpr("[0-9]+", years)  # Numbers with any number of digits
x2 <- as.numeric(unlist(regmatches(years, x)))

4voto

Moody_Mudskipper Points 18115

Utilisation du paquet décoller nous pouvons faire :

# install.packages("unglue")
library(unglue)

years<-c("20 years old", "1 years old")
unglue_vec(years, "{x} years old", convert = TRUE)
#> [1] 20  1

Créé le 2019-11-06 par le paquet reprex (v0.3.0)

Plus d'informations : https://github.com/moodymudskipper/unglue/blob/master/README.md

3voto

juanbretti Points 198

Après le post de Gabor Grothendieck post à la liste de diffusion 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]])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X