r

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



(13)

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

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

para renombrar las columnas. ¿Cómo hago esto si es solo una columna? Significa un vector o marco de datos 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]


Creo que la mejor forma de cambiar el nombre de las columnas es mediante el uso del 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 varias columnas en cualquier conjunto de datos.


Encuentro que la forma más conveniente de renombrar 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 la cadena de tuberías
  • Conveniente cuando los nombres se almacenan en variables
  • trabaja con un nombre o un índice de columna
  • claro y compacto

Es probable que esto ya esté disponible, pero estaba jugando con el cambio de nombre de campos mientras buscaba una solución y probé 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"))


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 prácticamente lo siguiente:

  1. names(df) busca en 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.

Esta es una pregunta antigua, pero vale la pena señalar que ahora puede usar los setnames de los data.table 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 usando 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 saber la posición) y realizar varios renombramientos a la vez. Después de hacer una combinación, por ejemplo, podría 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 luego puede cambiar el nombre en un solo 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


Me gusta el siguiente estilo para cambiar el nombre de las columnas de marco de datos uno por uno.

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

dónde

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

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


Puedes 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 colocar un texto anterior a los nombres de las variables, entonces puede hacer algo como:

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

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


Si sabe que su marco de datos solo tiene una columna, puede usar: names(trSamp) <- "newname2"


También puedes probar ''upData'' del paquete ''Hmisc''.

library(Hmisc)

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


Tratar:

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


colnames(df)[colnames(df) == ''oldName''] <- ''newName''


colnames(trSamp)[2] <- "newname2"

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

colnames(trSamp) <- "newname2"