467 votes

Changer les noms de colonnes d'un cadre de données

J'ai un cadre de données appelé "newprice" (voir ci-dessous) et je veux changer les noms des colonnes dans mon programme en R.

> newprice
   Chang.  Chang.   Chang.
1     100       36      136
2     120      -33       87
3     150       14      164

En fait, voici ce que je fais :

names(newprice)[1]<-paste("premium")
names(newprice)[2]<-paste("change")
names(newprice)[3]<-paste("newprice") 

Je n'ai pas mis cela dans une boucle car je veux que chaque nom de colonne soit différent comme vous le voyez.

Quand je colle mon programme dans la console R, voici la sortie qu'il me donne :

> names(newprice)[1]<-paste(“premium”)
Error: unexpected input in "names(newprice)[1]<-paste(“"
> names(newprice)[2]<-paste(“change”)
Error: unexpected input in "names(newprice)[2]<-paste(“"
> names(newprice)[3]<-paste(“newpremium”)
Error: unexpected input in "names(newprice)[3]<-paste(“"

J'ai également essayé d'utiliser la fonction c() - par exemple c("premium"), au lieu de la fonction paste(), mais en vain.

Est-ce que quelqu'un pourrait m'aider à résoudre ce problème?

0 votes

Si la réponse de Dirk fonctionne, alors le problème était que vous travailliez avec une matrice plutôt qu'avec un dataframe. Vous pouvez vérifier cela avec soit is.matrix ou str.

5 votes

Voir cette réponse sur dplyr::rename stackoverflow.com/a/26146202/1831980

16 votes

colnames(newprice)<- c("prime","modification","nouveauprix")

669voto

Dirk Eddelbuettel Points 134700

Utilisez la fonction colnames():

R> X <- data.frame(bad=1:3, worse=rnorm(3))
R> X
  bad     worse
1   1 -2.440467
2   2  1.320113
3   3 -0.306639
R> colnames(X) <- c("good", "better")
R> X
  good    better
1    1 -2.440467
2    2  1.320113
3    3 -0.306639

Vous pouvez également sélectionner :

R> colnames(X)[2] <- "superduper"

16 votes

@Dirk Pourquoi ne pas utiliser names() à la place de colnames()?

8 votes

Super! Vous pouvez également sous-ensemble de multiples colonnes en une seule fois (utile sur de grands cadres de données). colnames(X)[c(1,2)] <- c("bon", "meilleur")

8 votes

Essayez setnames() dans le package data.table. Utilisez quelque chose comme setnames(DT,"b","B") ou setnames(DT,c("a","E"),c("A","F"))

216voto

Matheus Abreu Points 264

J'utilise ceci :

colnames(dataframe)[which(names(dataframe) == "columnName")] <- "newColumnName"

11 votes

Merci. Je pense que c'est un peu ennuyeux avec R: Pourquoi est-il si difficile de changer le nom de la colonne si vous ne voulez pas utiliser le numéro d'index mais l'ancien nom :(

12 votes

Cette méthode a l'avantage que vous n'avez pas à vous soucier de la position de la colonne, tant que vous connaissez son nom d'origine. Je pense que c'est la méthode préférée car vous pouvez - plus tard - apporter des modifications au code qui changent la position de la colonne que vous souhaitez renommer.

1 votes

Peut également utiliser data.table::setnames(dataframe,'Ancien','Nouveau')

87voto

Joshua Ulrich Points 68776

L'erreur est causée par les "guillemets intelligents" (ou peu importe comment ils s'appellent). La leçon ici est, "ne codez pas dans un 'éditeur' qui convertit les guillemets en guillemets intelligents".

names(newprice)[1]<-paste("premium")  # erreur
names(newprice)[1]<-paste("premium")  # fonctionne

Aussi, vous n'avez pas besoin de paste("premium") (l'appel à paste est redondant) et c'est une bonne idée de mettre des espaces autour de <- pour éviter la confusion (par exemple x <- -10; if(x<-3) "salut" else "au revoir"; x).

72voto

Jamie Points 1976

Essayer :

names(newprice)[1] <- "premium"

8voto

Vous pouvez simplement effectuer la modification en :

newprice <- edit(newprice)

et changer le nom de la colonne manuellement.

0 votes

Ne fonctionne-t-il pas uniquement pour les éléments vectoriels et factoriels? > locanatmodelset <- edit(locanatmodelset) Erreur dans edit.data.frame(locanatmodelset) : ne peut traiter que des éléments vectoriels et factoriels

0 votes

Cela fonctionne pour les cadres de données au moins. C'est ce que je sais.

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