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