Changer nom de colonne

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

catherine reeb
Messages : 4
Enregistré le : 20 Aoû 2009, 15:01

Changer nom de colonne

Messagepar catherine reeb » 07 Mar 2010, 15:39

Bonjour,
je me remets à R, et je n'arrive pas à enlever le "X" qui se met automatiquement avant le nom de mes variables. en gros, comment changer le nom des variables, je l'ai déjà fait, mais....

read.table("inv.txt",header=TRUE , row.names=1)->data
colnames(data) #me donne
X55_D_aff X56_E_ach X57_E_cor
#et je voudrai juste
55_D_aff 56_E_ach 57_E_cor

je n'ai pas trouvé sur le forum, mais j'imagine que cela a déjà été posé

Merci d'avance
CR

catherine reeb
Messages : 4
Enregistré le : 20 Aoû 2009, 15:01

Messagepar catherine reeb » 07 Mar 2010, 15:46

ouups je viens de tester

substr(nomcolonne,2, nchar(nomcolonne))->nomcol0X

cela fonctionne, mais peut être y a-t-il quelque chose de plus direct?
merci
CR

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Messagepar Christophe Genolini » 07 Mar 2010, 17:50

Tu n'as pas le droit d'utiliser pour une variable un nom qui commence pas un chiffre :

Code : Tout sélectionner

(e3XX <- 3)
[1] 3
(3XX <- 3)
Erreur : symbole inattendu(e) dans "3XX"

Cet interdit s'applique aussi aux noms de colonnes. Ainsi, même si tu peux renommer les colonnes (ce qui est une incohérence du langage, il ne devrait normalement pas te laisser faire), tu ne pourras plus ensuite les utiliser :

Code : Tout sélectionner

###Renomage des colonnes :
d <- data.frame(X3e=3:4,X4e=2:3)
names(d) <- substr(names(d),2,3)

###Ca a marché :
d
#  3e 4e
#1  3  2
#2  4  3

### Mais on ne peut pas utiliser :
d$3e
Erreur : entrée inattendu(e) dans "d$3e"


Christophe

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 07 Mar 2010, 21:06

Maxime

En fait ce n'est pas tout a fait vrai mais ça complique la tache :

Code : Tout sélectionner

 d[,"3e"]
d$'3e'

'3XX' <- 3
ls.str()
3XX :  num 3


Maxime

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 08 Mar 2010, 09:39

Re,

pour en revenir à la question initiale :

Code : Tout sélectionner

sub("^X","",nomcolonne)


Maxime

Dominique Soudant
Messages : 758
Enregistré le : 23 Avr 2008, 11:12
Contact :

Messagepar Dominique Soudant » 08 Mar 2010, 10:28

Et pour les mal comprenant (comme moi) des regular expressions

Code : Tout sélectionner

sub(glob2rx("X*"),"",nomcolonne)
Sinon pour changer un nom de colone je fais :

Code : Tout sélectionner

names(DataFrame)[match("AncienNom",names(DataFrame)] <- "NouveauNom"

Elsa Nario
Messages : 83
Enregistré le : 22 Mar 2019, 09:06

*

Messagepar Elsa Nario » 22 Mar 2019, 14:26

*

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Changer nom de colonne

Messagepar Mickael Canouil » 22 Mar 2019, 15:13

Bonjour,

EDIT: Il aurait mieux valu ouvrir un nouveau post, non?
Je vous invite à utiliser les fonctions d'aide de R => ??setnames ou help.search("setnames")


Réponse au sujet initial, même si très vieux:
euh, comment dire, et si on réglait le "problème" dès l'importation ? Argument "check.names" (existe aussi dans la fonction "data.frame()")

Code : Tout sélectionner

data <- read.table("inv.txt", header = TRUE , row.names = 1, check.names = FALSE)


PS: pour avoir des noms de colonnes avec n'importe quoi à l'intérieur, il suffit après de récupérer celle-ci non pas avec des guillemets mais avec le "backtick" => " ` "

Pour reprendre l'exemple de Christophe:

Code : Tout sélectionner

### Renomage des colonnes :
d <- data.frame(X3e = 3:4, X4e = 2:3)
names(d) <- substr(names(d), 2, 3)

### Ca a marché :
d
#>   3e 4e
#> 1  3  2
#> 2  4  3

### Mais on ne peut pas utiliser :
d$3e
#> Error: unexpected input in "d$3e"

### Mais en fait si :
d$`3e`
#> [1] 3 4


Code : Tout sélectionner

d <- data.frame("3e" = 3:4, "4e" = 2:3)
d
#>   X3e X4e
#> 1   3   2
#> 2   4   3

d <- data.frame("3e" = 3:4, "4e" = 2:3, check.names = FALSE)
d
#>   3e 4e
#> 1  3  2
#> 2  4  3


Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité