J'ai beaucoup de chaînes, et chacune d'elles a généralement le format suivant: Ab_Cd-001234.txt
Je veux le remplacer par 001234
. Comment puis-je y parvenir en R?
En utilisant gsub
ou sub
, vous pouvez faire ceci:
gsub('.*-([0-9]+).*','\\1','Ab_Cd-001234.txt')
"001234"
vous pouvez utiliser regexpr
avec regmatches
m <- gregexpr('[0-9]+','Ab_Cd-001234.txt')
regmatches('Ab_Cd-001234.txt',m)
"001234"
EDIT les 2 méthodes sont vectorisées et fonctionnent pour un vecteur de chaînes.
x <- c('Ab_Cd-001234.txt','Ab_Cd-001234.txt')
sub('.*-([0-9]+).*','\\1',x)
"001234" "001234"
m <- gregexpr('[0-9]+',x)
> regmatches(x,m)
[[1]]
[1] "001234"
[[2]]
[1] "001234"
Le paquet stringr propose de nombreux raccourcis pratiques pour ce type de travail:
# input data following @agstudy
data <- c('Ab_Cd-001234.txt','Ab_Cd-001234.txt')
# load library
library(stringr)
# prepare regular expression
regexp <- "[[:digit:]]+"
# process string
str_extract(data, regexp)
Which gives the desired result:
[1] "001234" "001234"
Pour expliquer un peu l'expression rationnelle:
[[:digit:]]
est un nombre compris entre 0 et 9
+
signifie que l'élément précédent (dans ce cas, un chiffre) sera mis en correspondance une ou plusieurs fois
Cette page est également très utile pour ce type de traitement de chaîne: http://en.wikibooks.org/wiki/R_Programming/Text_Processing
Vous pouvez utiliser genXtract
à partir du package qdap. Cela prend une chaîne de caractères gauche et une chaîne de caractères droite et extrait les éléments entre.
library(qdap)
genXtract("Ab_Cd-001234.txt", "-", ".txt")
Bien que je préfère de loin la réponse d'Agstudy.
MODIFIER Extension de la réponse pour correspondre à l'agstudy:
x <- c('Ab_Cd-001234.txt','Ab_Cd-001234.txt')
genXtract(x, "-", ".txt")
# $`- : .txt1`
# [1] "001234"
#
# $`- : .txt2`
# [1] "001234"
gsub Supprimer le préfixe et le suffixe:
gsub(".*-|\\.txt$", "", x)
package d'outils Utilisez file_path_sans_ext
des outils pour supprimer l'extension, puis utilisez sub
pour supprimer le préfixe:
library(tools)
sub(".*-", "", file_path_sans_ext(x))
strapplyc Extraire les chiffres après - et avant le point. Voir page d'accueil de gsubfn pour plus d'informations:
library(gsubfn)
strapplyc(x, "-(\\d+)\\.", simplify = TRUE)
Notez que si vous vouliez retourner un numérique, nous pourrions utiliser strapply
plutôt que strapplyc
comme ceci:
strapply(x, "-(\\d+)\\.", as.numeric, simplify = TRUE)