¿Cómo cambiar el nombre de una sola columna en un data.frame?

Sé que si tengo un dataframe con más de 1 columna, puedo usar

colnames(x) <- c("col1","col2") 

para cambiar el nombre de las columnas ¿Cómo hago esto si solo se trata de una columna? Es decir, un vector o dataframe con una sola columna.

Ejemplo:

 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" 

intenta establecer el nombre de la segunda columna. Su objeto solo tiene una columna, por lo que el comando arroja un error. Esto debería ser suficiente:

 colnames(trSamp) <- "newname2" 

Esta es una forma generalizada en la que no tiene que recordar la ubicación exacta 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' 

Este código hace bastante lo siguiente:

  1. names(df) examina todos los nombres en el df
  2. [names(df) == old.var.name] extrae el nombre de la variable que desea verificar
  3. <- 'new.var.name' asigna el nuevo nombre de variable.
 colnames(df)[colnames(df) == 'oldName'] <- 'newName' 

Esta es una vieja pregunta, pero vale la pena señalar que ahora puede usar setnames del paquete 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) 

Esto también se puede hacer utilizando el paquete plyr de Hadley y la función de rename .

 library(plyr) df <- data.frame(foo=rnorm(1000)) df <- rename(df,c('foo'='samples')) 

Puede cambiar el nombre por el nombre (sin conocer la posición) y realizar varios cambios de nombre a la vez. Después de hacer una fusión, por ejemplo, podrías terminar con:

  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 puede cambiar el nombre en un paso usando:

 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 

Creo que la mejor manera de cambiar el nombre de las columnas es usando el paquete dplyr de esta manera:

 require(dplyr) df = rename(df, new_col01 = old_col01, new_col02 = old_col02, ...) 

Funciona igual para cambiar el nombre de una o muchas columnas en cualquier conjunto de datos.

Me gusta el siguiente estilo para cambiar el nombre de los nombres de las columnas del dataframe uno por uno.

 colnames(df)[which(colnames(df) == 'old_colname')] <- 'new_colname' 

dónde

 which(colnames(df) == 'old_colname') 

regresa por el índice de la columna específica.

Tratar:

 colnames(x)[2] <- 'newname2' 

También puede probar ‘upData’ del paquete ‘Hmisc’.

library(Hmisc)

trSamp = upData(trSamp, rename=c(sample.trainer.index..10000. = 'newname2'))

Puede usar rename.vars en el paquete gdata .

 library(gdata) df <- rename.vars(df, from = "oldname", to = "newname") 

Esto es particularmente útil cuando tiene más de un nombre de variable para cambiar o si desea agregar o preaprender algún texto a los nombres de las variables, luego puede hacer algo como:

 df <- rename.vars(df, from = c("old1", "old2", "old3", to = c("new1", "new2", "new3")) 

Para ver un ejemplo de cómo agregar texto a un subconjunto de nombres de variables, consulte: https://stackoverflow.com/a/28870000/180892.

Encuentro que la forma más conveniente de cambiar el nombre de una sola columna es usar 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 
  • funciona bien en chaines de tubo
  • conveniente cuando los nombres se almacenan en variables
  • funciona con un nombre o un índice de columna
  • claro y compacto

Si sabe que su dataframe tiene una sola columna, puede usar: names(trSamp) <- "newname2"

Es probable que ya esté por ahí, pero estaba jugando con el cambio de nombre de los campos mientras buscaba una solución e intenté esto por capricho. Trabajó para mis propósitos.

 Table1$FieldNewName <- Table1$FieldOldName Table1$FieldOldName <- NULL 

La edición comienza aquí ...

Esto funciona también.

 df <- rename(df, c("oldColName" = "newColName"))