J'ai un bloc de données appelé "nouveau prix" (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 n'ai pas mis cela en boucle parce que je veux que chaque nom de colonne soit différent comme vous le voyez.
Lorsque je colle mon programme dans la console R, c'est 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 c()
fonction, par exemple c("premium")
, au lieu de la paste()
fonction, mais en vain.
Quelqu'un pourrait-il m'aider à comprendre cela?
is.matrix
oustr
.colnames(newprice)<- c("premium","change","newprice")
Réponses:
Utilisez la
colnames()
fonction:Vous pouvez également sous-définir:
la source
colnames(X)[c(1,2)] <- c("good", "better")
setnames()
dans ledata.table
package. Utilisez quelque chose commesetnames(DT,"b","B")
ousetnames(DT,c("a","E"),c("A","F"))
q1
, essayer de muter le bloc de données en utilisantdplyr
comme dans lesq1 <- q1 %>% mutate(rel_count = count / 482462)
résultats de l'erreurError in mutate_impl(.data, dots) : unknown column 'days'
(oùdays
est un nouveau nom donné à la colonne). C'est vraiment frustrant.J'utilise ceci:
la source
L'erreur est causée par les «guillemets intelligents» (ou leur nom). La leçon ici est, "n'écrivez pas votre code dans un 'éditeur' qui convertit les citations en citations intelligentes".
De plus, vous n'avez pas besoin
paste("premium")
(l'appel àpaste
est redondant) et c'est une bonne idée de mettre des espaces<-
pour éviter la confusion (par exemplex <- -10; if(x<-3) "hi" else "bye"; x
).la source
Avez-vous essayé simplement:
names(newprice)[1]<-"premium"
?
la source
La nouvelle façon recommandée de le faire est d'utiliser la
setNames
fonction. Tu vois?setNames
. Comme cela crée une nouvelle copie de ladata.frame
, assurez-vous d'affecter le résultat à l'originaldata.frame
, si telle est votre intention.Les versions plus récentes de R vous avertiront si vous utilisez
colnames
de certaines des manières suggérées par les réponses précédentes.S'il s'agissait
data.table
plutôt d' un , vous pourriez utiliser ladata.table
fonctionsetnames
, qui peut modifier des noms de colonne spécifiques ou un nom de colonne unique par référence :la source
J'ai eu le même problème et ce morceau de code a fonctionné pour moi.
En bref, ce code fait ce qui suit:
names(data)
examine tous les noms dans le dataframe (data
)[names(data) == oldVariableName]
extrait le nom de variable (oldVariableName
) que vous souhaitez renommer et<- "newVariableName"
attribue le nouveau nom de variable.la source
Similaire aux autres:
Assez simple et facile à modifier.
la source
essayer:
la source
Si vous devez renommer non pas toutes les colonnes mais plusieurs à la fois lorsque vous ne connaissez que les anciens noms de colonne, vous pouvez utiliser la
colnames
fonction et l'%in%
opérateur. Exemple:Maintenant, vous voulez changer "mauvais" et "pire" en "bon" et "meilleur". Vous pouvez utiliser
Il en résulte
la source
Utilisez-le pour modifier le nom de la colonne par la fonction colname.
la source
Vous pouvez simplement faire le montage en:
et modifiez le nom de la colonne manuellement.
la source
> locanatmodelset<-edit(locanatmodelset) Error in edit.data.frame(locanatmodelset) : can only handle vector and factor elements
Les noms de mes colonnes sont comme ci-dessous
Je souhaite modifier le nom de la colonne Classe et sexe
la source
Il y a quelques options avec
dplyr::rename()
etdplyr::select()
:Il existe également trois variantes de portée
dplyr::rename()
:dplyr::rename_all()
pour tous les noms de colonne,dplyr::rename_if()
pour le ciblage conditionnel des noms de colonne etdplyr::rename_at()
pour sélectionner les colonnes nommées. L'exemple suivant remplace les espaces et les points par un trait de soulignement et convertit tout en minuscules:dplyr::select_all()
peut également être utilisé de manière similaire:la source
Juste pour corriger et étendre légèrement la réponse de Scott Wilson.
Vous pouvez également utiliser la
setnames
fonction de data.table sur data.frames.Ne vous attendez pas à une accélération de l'opération, mais vous pouvez vous attendre à ce
setnames
qu'il soit plus efficace pour la consommation de mémoire car il met à jour les noms de colonne par référence. Cela peut être suivi avec laaddress
fonction, voir ci-dessous.Donc, si vous atteignez vos limites de mémoire, vous pouvez envisager d'utiliser celui-ci à la place.
la source
Cela peut être utile:
la source
Au cas où nous aurions 2 cadres de données, les travaux suivants
Nous changeons les noms de DF1 comme suit
la source