Je sais que si j'ai un bloc de données avec plus d'une colonne, je peux utiliser
colnames(x) <- c("col1","col2")
pour renommer les colonnes. Comment dois-je procéder si ce n'est qu'une colonne? Signification d'un vecteur ou d'un bloc de données contenant une seule colonne.
Exemple:
trSamp <- data.frame(sample(trainer$index, 10000))
head(trSamp )
# sample.trainer.index..10000.
# 1 5907862
# 2 2181266
# 3 7368504
# 4 1949790
# 5 3475174
# 6 6062879
ncol(trSamp)
# [1] 1
class(trSamp)
# [1] "data.frame"
class(trSamp[1])
# [1] "data.frame"
class(trSamp[,1])
# [1] "numeric"
colnames(trSamp)[2] <- "newname2"
# Error in names(x) <- value :
# 'names' attribute [2] must be the same length as the vector [1]
drop=TRUE
argument par défaut de[
, qui provoque la conversion d'un objet "1 colonne" en vecteur ... et les vecteurs n'en ont pascolnames
. Un exemple de ce que vous avez essayé serait très utile.Réponses:
tente de définir le nom de la deuxième colonne. Votre objet n'a qu'une seule colonne, la commande génère donc une erreur. Cela devrait être suffisant:
la source
"A,B,C,X,Y,Z"
où je veux le renommer enY
utilisanttestData[379] <- "Y"
.Il s'agit d'une manière généralisée dans laquelle vous n'avez pas à vous souvenir de l'emplacement exact de la variable:
Ce code fait à peu près ce qui suit:
names(df)
examine tous les noms dudf
[names(df) == old.var.name]
extrait le nom de variable que vous souhaitez vérifier<- 'new.var.name'
attribue le nouveau nom de variable.la source
[names(df) == old.var.name]
retourne en fait un vecteur avec des valeurs vraies / fausses. Il a donc le potentiel de changer plusieurs noms de colonnes si, par exemple, des expressions régulières sont utilisées.names(df) = sub('pattern', 'replacement', names(df))
. Sinon, vous essayez de définir plusieurs colonnes avec le même nom.la source
colnames(GWASDATA_RAWSELECTION)[colnames(GWASDATA_RAWSELECTION)=="^snp$"] <- "Marker"
car la colonne n'est pas renommée. Si je le fais,names(GWASDATA_RAWSELECTION)[names(GWASDATA_RAWSELECTION)=="snp"] <- "Marker"
il est renommé. Qu'est-ce que je rate?C'est une vieille question, mais il convient de noter que vous pouvez maintenant l'utiliser à
setnames
partir dudata.table
package.la source
setNames
depuis la base R.Cela peut également être fait en utilisant le
plyr
package de Hadley et larename
fonction.Vous pouvez renommer par le nom (sans connaître la position) et effectuer plusieurs renommages à la fois. Après avoir effectué une fusion, par exemple, vous pourriez vous retrouver avec:
Que vous pouvez ensuite renommer en une seule étape en utilisant:
la source
rename
est désormais également une fonction dudplyr
package.Je pense que la meilleure façon de renommer les colonnes est d'utiliser le package dplyr comme ceci:
Il en va de même pour renommer une ou plusieurs colonnes dans n'importe quel ensemble de données.
la source
J'aime le style suivant pour renommer les noms de colonne de trame de données un par un.
où
renvoie par l'index de la colonne spécifique.
la source
which()
n'est pas nécessaire.Je trouve que la façon la plus pratique de renommer une seule colonne est d'utiliser
dplyr::rename_at
:la source
Vous pouvez utiliser le
rename.vars
dans legdata
package.Ceci est particulièrement utile lorsque vous avez plus d'un nom de variable à modifier ou si vous souhaitez ajouter ou ajouter du texte aux noms de variable, vous pouvez alors faire quelque chose comme:
Pour un exemple d'ajout de texte à un sous-ensemble de noms de variables, voir: https://stackoverflow.com/a/28870000/180892
la source
Essayer:
la source
"A,B,C,X,Y,Z"
où je veux le renommer enY
utilisanttestData[379] <- "Y"
.C'est probablement déjà là-bas, mais je jouais avec renommer les champs tout en recherchant une solution et j'ai essayé cela sur un coup de tête. A travaillé pour mes fins.
Le montage commence ici ....
Cela fonctionne aussi.
la source
rename
provient la fonction?Si vous savez que votre dataframe n'a qu'une seule colonne, vous pouvez utiliser:
names(trSamp) <- "newname2"
la source
Vous pouvez également essayer «upData» du package «Hmisc».
library(Hmisc)
trSamp = upData(trSamp, rename=c(sample.trainer.index..10000. = 'newname2'))
la source
On a bel et bien répondu à la question du PO. Cependant, voici une astuce qui peut être utile dans certaines situations: correspondance partielle du nom de la colonne, quelle que soit sa position dans une trame de données:
Correspondance partielle sur le nom:
Autre exemple: correspondance partielle sur la présence de "ponctuation":
Ce sont des exemples que j'ai dû traiter aujourd'hui, je pensais que cela valait la peine d'être partagé.
la source
J'ai trouvé l'
colnames()
argument plus facile https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/row%2Bcolnamessélectionner une colonne dans le bloc de données
et renommer la colonne sélectionnée dans l'ordre,
vérifier les noms et les valeurs pour être sûr
la source
Nous pouvons utiliser
rename_with
pour renommer les colonnes avec une fonction (stringr
fonctions, par exemple).Tenez compte des données suivantes
df_1
:Renommez toutes les variables avec
dplyr::everything()
:Renommer par particule nom avec des
dplyr
verbes (starts_with
,ends_with
,contains
,matches
, ...).Exemple avec
.
(x
variables):Renommer par classe avec de nombreuses fonctions de test de classe, comme
is.integer
,is.numeric
,is.factor
...Exemple avec
is.integer
(y
):L'avertissement:
Il n'est pas pertinent, car il s'agit simplement d'une incohérence
seq_along(.)
avec la fonction de remplacement.la source
J'ajouterais simplement une nouvelle colonne au bloc de données avec le nom que je veux et j'obtiendrais les données pour cela à partir de la colonne existante. comme ça:
alors je retire l'ancienne colonne! comme ça:
Ce code peut sembler idiot! Mais ça marche parfaitement ...
la source
Je changerais simplement un nom de colonne en ensemble de données avec le nouveau nom que je veux avec le code suivant: names (dataset) [index_value] <- "new_col_name"
la source
la source