J'ai un tas de noms de colonne

L_1_3
L_2_23
L_3_91
L_3_16

Je veux remplacer ces noms de colonne par de nouveaux noms en utilisant les derniers chiffres suivant le _ comme ceci:

3
23
91
16

J'ai essayé colnames(X) <- gsub("L_\\d\\d_", "", colnames(X)) qui fonctionne pour les chaînes avec deux chiffres à la fin. Je veux celui qui fonctionne à la fois pour les chiffres simples et doubles.

Je vous remercie!

12
Drew 2 juin 2020 à 21:22

4 réponses

Meilleure réponse

Voici une option avec une anticipation positive:

gsub(".+_(?=\\d+$)", "", X, perl = TRUE)
[1] "3"  "23" "91" "16"
11
Ian Campbell 15 juin 2020 à 03:22

Voici une expression régulière qui le fait.
Il obtient n'importe quoi jusqu'à ce qu'un non-chiffre suivi du groupe de capture d'un ou plusieurs chiffres à la fin. Et remplace par le groupe de capture.

sub('.*[^[:digit:]]{1}([[:digit:]]+$)', '\\1', x)
#[1] "3"  "23" "91" "16"

Une regex qui fonctionne pour les chiffres simples et doubles, mais ni plus ni moins ne serait

sub('.*[^[:digit:]]{1}([[:digit:]]{1,2}$)', '\\1', x)
#[1] "3"  "23" "91" "16"

Données

x <- scan(what = character(), text = '
L_1_3
L_2_23
L_3_91
L_3_16')
4
Rui Barradas 2 juin 2020 à 18:30

Nous pouvons utiliser str_extract

library(stringr)
str_extract(X, "\\d+$")
#[1] "3"  "23" "91" "16"

Les données

X <- c("L_1_3", "L_2_23", "L_3_91", "L_3_16")
4
akrun 2 juin 2020 à 19:06

J'ai essayé de le garder aussi simple que possible

sub(".*_(\\d+$)", "\\1", X)
[1] "3"  "23" "91" "16"
2
Daniel O 2 juin 2020 à 18:46