Je sais que si j'ai un bloc de données avec plus d'une colonne, je peux utiliser
colnames(x) <- c("col1","col2")
renommer les colonnes. Comment puis-je faire cela s'il ne s'agit que d'une colonne? Signifiant un vecteur ou un cadre 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]
colnames(trSamp)[2] <- "newname2"
tente de définir le nom de la deuxième colonne. Votre objet n'a qu'une colonne, la commande génère donc une erreur. Cela devrait suffire:
colnames(trSamp) <- "newname2"
C'est une façon généralisée de ne pas avoir à se rappeler l'emplacement exact de la variable:
# df = dataframe
# old.var.name = The name you don't like anymore
# new.var.name = The name you want to get
names(df)[names(df) == 'old.var.name'] <- 'new.var.name'
Ce code fait à peu près ce qui suit:
names(df)
examine tous les noms de la df
[names(df) == old.var.name]
extrait le nom de variable que vous voulez vérifier<- 'new.var.name'
assigne le nouveau nom de variable.colnames(df)[colnames(df) == 'oldName'] <- 'newName'
C'est une vieille question, mais il convient de noter que vous pouvez maintenant utiliser setnames
à partir du paquetage data.table
.
library(data.table)
setnames(DF, "oldName", "newName")
# or since the data.frame in question is just one column:
setnames(DF, "newName")
# And for reference's sake, in general (more than once column)
nms <- c("col1.name", "col2.name", etc...)
setnames(DF, nms)
Cela peut également être fait en utilisant le paquet plyr
de Hadley et la fonction rename
.
library(plyr)
df <- data.frame(foo=rnorm(1000))
df <- rename(df,c('foo'='samples'))
Vous pouvez renommer par le nom (sans connaître la position) et effectuer plusieurs renommage à la fois. Après une fusion, par exemple, vous pourriez vous retrouver avec:
letterid id.x id.y
1 70 2 1
2 116 6 5
3 116 6 4
4 116 6 3
5 766 14 9
6 766 14 13
Que vous pouvez ensuite renommer en une étape en utilisant:
letters <- rename(letters,c("id.x" = "source", "id.y" = "target"))
letterid source target
1 70 2 1
2 116 6 5
3 116 6 4
4 116 6 3
5 766 14 9
6 766 14 13
Je pense que le meilleur moyen de renommer les colonnes est d'utiliser le paquet dplyr comme ceci:
require(dplyr)
df = rename(df, new_col01 = old_col01, new_col02 = old_col02, ...)
Cela fonctionne de la même manière pour renommer une ou plusieurs colonnes dans n'importe quel jeu de données.
J'aime le style suivant pour renommer les noms de colonne dataframe un par un.
colnames(df)[which(colnames(df) == 'old_colname')] <- 'new_colname'
où
which(colnames(df) == 'old_colname')
retourne par l'index de la colonne spécifique.
Je trouve que le moyen le plus pratique de renommer une colonne consiste à utiliser dplyr::rename_at
:
library(dplyr)
cars %>% rename_at("speed",~"new") %>% head
cars %>% rename_at(vars(speed),~"new") %>% head
cars %>% rename_at(1,~"new") %>% head
# new dist
# 1 4 2
# 2 4 10
# 3 7 4
# 4 7 22
# 5 8 16
# 6 9 10
Vous pouvez utiliser le rename.vars
dans le package gdata
.
library(gdata)
df <- rename.vars(df, from = "oldname", to = "newname")
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 effectuer les opérations suivantes:
df <- rename.vars(df, from = c("old1", "old2", "old3",
to = c("new1", "new2", "new3"))
Pour un exemple d’ajout de texte à un sous-ensemble de noms de variables, voir: https://stackoverflow.com/a/28870000/180892
Essayer:
colnames(x)[2] <- 'newname2'
Vous pouvez également essayer 'upData' à partir du paquet 'Hmisc'.
library(Hmisc)
trSamp = upData(trSamp, rename=c(sample.trainer.index..10000. = 'newname2'))
C'est probablement déjà fait, mais je jouais avec renommer des champs tout en recherchant une solution et en essayant sur un coup de tête. Travaillé pour mes besoins.
Table1$FieldNewName <- Table1$FieldOldName
Table1$FieldOldName <- NULL
Modifier commence ici ....
Cela fonctionne aussi bien.
df <- rename(df, c("oldColName" = "newColName"))
Si vous savez que votre structure de données ne comporte qu'une seule colonne, vous pouvez utiliser: names(trSamp) <- "newname2"
La question du PO a bien été résolue. Cependant, voici une astuce qui peut être utile dans certaines situations: correspondance partielle du nom de la colonne, quelle que soit sa position dans un cadre de données:
Correspondance partielle sur le nom:
d <- data.frame(name1 = NA, Reported.Cases..WHO..2011. = NA, name3 = NA)
## name1 Reported.Cases..WHO..2011. name3
## 1 NA NA NA
names(d)[grepl("Reported", names(d))] <- "name2"
## name1 name2 name3
## 1 NA NA NA
Autre exemple: correspondance partielle sur la présence de "ponctuation":
d <- data.frame(name1 = NA, Reported.Cases..WHO..2011. = NA, name3 = NA)
## name1 Reported.Cases..WHO..2011. name3
## 1 NA NA NA
names(d)[grepl("[[:punct:]]", names(d))] <- "name2"
## name1 name2 name3
## 1 NA NA NA
C'étaient des exemples que j'avais à traiter aujourd'hui, je pensais qu'il valait peut-être la peine de les partager.
Je voudrais simplement ajouter une nouvelle colonne au cadre de données avec le nom que je veux et obtenir les données pour cela de la colonne existante. comme ça:
dataf$value=dataf$Article1Order
alors je supprime l'ancienne colonne! comme ça:
dataf$Article1Order<-NULL
Ce code peut sembler idiot! Mais cela fonctionne parfaitement ...
Je voudrais simplement changer un nom de colonne à l'ensemble de données avec le nouveau nom que je veux avec le code suivant: names (dataset) [valeur_index] <- "nouveau_nom_colonne"