Modification des noms de colonne d’un bloc de données

J’ai un bloc de données appelé “newprice” (voir ci-dessous) et je veux changer les noms de colonnes dans mon programme en R.

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

En fait c’est ce que je fais:

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

Je ne l’ai pas mis en boucle car je souhaite que chaque nom de colonne soit différent comme vous le voyez.

Lorsque je colle mon programme dans la console R, c’est le résultat qu’il me donne:

 > names(newprice)[1]<-paste(“premium”) Error: unexpected input in "names(newprice)[1] names(newprice)[2]<-paste(“change”) Error: unexpected input in "names(newprice)[2] 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.

Quelqu’un pourrait-il m’aider à comprendre cela?

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 sous-ensemble:

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

J’utilise ceci:

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

L’erreur est causée par les “citations intelligentes” (ou tout ce qu’elles appellent). La leçon ici est “n’écrivez pas votre code dans un” éditeur “qui convertit les guillemets en guillemets”.

 names(newprice)[1]<-paste(“premium”) # error names(newprice)[1]<-paste("premium") # works 

De plus, vous n'avez pas besoin de paste("premium") (l'appel à paste est redondant) et il est conseillé de placer des espaces autour de <- pour éviter toute confusion (par exemple, x <- -10; if(x<-3) "hi" else "bye"; x ).

Avez-vous essayé juste:

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

?

La nouvelle méthode recommandée consiste à utiliser la fonction setNames . Voir ?setNames . Comme cela crée une nouvelle copie du data.frame , assurez-vous d’atsortingbuer le résultat au data.frame origine, si tel est votre intention.

 data_frame <- setNames(data_frame, c("premium","change","newprice")) 

Les nouvelles versions de R vous colnames si vous utilisez des colnames de colnames dans certaines des manières suggérées par les réponses précédentes.

S'il s'agissait d'un data.table , vous pourriez utiliser les data.table fonctions de la fonction setnames , qui peuvent modifier des noms de colonnes spécifiques ou un nom de colonne unique par référence :

 setnames(data_table, "old-name", "new-name") 

J’ai eu le même problème et ce morceau de code a fonctionné pour moi.

 names(data)[names(data) == "oldVariableName"] <- "newVariableName" 

En bref, ce code effectue les opérations suivantes:

names(data) examinent tous les noms dans le dataframe ( data )

[names(data) == oldVariableName] extrait le nom de la variable ( oldVariableName ) que vous souhaitez renommer et <- "newVariableName" assigne le nouveau nom de la variable.

Similaire aux autres:

 cols <- c("premium","change","newprice") colnames(dataframe) <- cols 

Assez simple et facile à modifier.

Vous pouvez simplement faire l’édition en:

 newprice <- edit(newprice) 

et changez le nom de la colonne manuellement.

essayer:

 names(newprice) <- c("premium", "change", "newprice") 

Si vous devez renommer toutes les colonnes sauf les colonnes multiples lorsque vous ne connaissez que les anciens noms de colonnes, vous pouvez utiliser la fonction colnames et l’opérateur %in% . Exemple:

 df = data.frame(bad=1:3, worse=rnorm(3), worst=LETTERS[1:3]) bad worse worst 1 1 -0.77915455 A 2 2 0.06717385 B 3 3 -0.02827242 C 

Maintenant, vous voulez changer “mauvais” et “pire” en “bon” et “meilleur”. Vous pouvez utiliser

 colnames(df)[which(colnames(df) %in% c("bad","worst") )] <- c("good","best") 

Cela se traduit par

  good worse best 1 1 -0.6010363 A 2 2 0.7336155 B 3 3 0.9435469 C 

Juste pour corriger et étendre légèrement la réponse de Scott Wilson.
Vous pouvez également utiliser la fonction setnames de setnames sur data.frames.

Ne vous attendez pas à une accélération de l’opération, mais vous pouvez vous attendre à ce que les setnames de jeu soient plus efficaces pour la consommation de mémoire car ils mettent à jour les noms de colonne par référence. Cela peut être suivi avec la fonction d’ address , voir ci-dessous.

 library(data.table) set.seed(123) n = 1e8 df = data.frame(bad=sample(1:3, n, TRUE), worse=rnorm(n)) address(df) #[1] "0x208f9f00" colnames(df) <- c("good", "better") address(df) #[1] "0x208fa1d8" rm(df) dt = data.table(bad=sample(1:3, n, TRUE), worse=rnorm(n)) address(dt) #[1] "0x535c830" setnames(dt, c("good", "better")) address(dt) #[1] "0x535c830" rm(dt) 

Donc, si vous atteignez vos limites de mémoire, vous pouvez envisager d'utiliser celle-ci à la place.

Vous pourriez avoir tout de suite fait

 names(newprice) <- c("premium","change","newprice") 

La commande de collage que vous utilisez prend 2 arguments au moins. Cela fonctionne comme une fonction de concaténation dans Excel, ce qui explique pourquoi je pense que c'est une erreur.

Cela peut être utile:

 rename.columns=function(df,changelist){ #renames columns of a dataframe for(i in 1:length(names(df))){ if(length(changelist[[names(df)[i]]])>0){ names(df)[i]= changelist[[names(df)[i]]] } } df } 

df = rename.columns (df, list (old.column = ‘new.column.name’))

Les noms de mes colonnes sont comme ci-dessous

 colnames(t) [1] "Class" "Sex" "Age" "Survived" "Freq" 

Je veux changer le nom de la colonne Class and Sex

 colnames(t)=c("STD","Gender","AGE","SURVIVED","FREQ") 

Dans le cas où nous avons 2 dataframes les travaux suivants

  DF1<-data.frame('a', 'b') DF2<-data.frame('c','d') 

Nous changeons les noms de DF1 comme suit

  colnames(DF1)<- colnames(DF2) 

Il y a quelques options avec dplyr :

 library(dplyr) mtcars %>% tibble::rownames_to_column('car_model') %>% # convert rowname to a column. tibble must be installed. select(car_model, est_mpg = mpg, horse_power = hp, everything()) %>% # rename specific columns and reorder rename(weight = wt, cylinders = cyl) %>% # another option for renaming specific columns head(2) car_model est_mpg horse_power cylinders disp drat weight qsec vs am gear carb 1 Mazda RX4 21 110 6 160 3.9 2.620 16.46 0 1 4 4 2 Mazda RX4 Wag 21 110 6 160 3.9 2.875 17.02 0 1 4 4 

dplyr::select_all() peut également être utilisé pour reformater les noms de colonnes. Cet exemple remplace les espaces et les points par un trait de soulignement et convertit tout en minuscule:

 iris %>% select_all(~gsub("\\s+|\\.", "_", .)) %>% select_all(tolower) %>% head(2) sepal_length sepal_width petal_length petal_width species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa