71 votos

¿Cómo se puede cambiar el nombre de una sola columna en un cuadro de datos en R?

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

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

para renombrar las columnas. ¿Cómo hago esto si es sólo una columna? Significa un vector o marco de datos con una sola columna.

EDITAR:

> 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]

153voto

user2371441 Puntos 661

Es una forma generalizada de no tener 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 más o menos lo siguiente:

  1. names(df) investiga todos los nombres en el df
  2. [names(df) == old.var.name] extrae el nombre de la variable que quieres comprobar
  3. <- 'new.var.name' asigna el nuevo nombre de la variable.

76voto

Joshua Ulrich Puntos 68776
colnames(trSamp)[2] <- "newname2"

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

colnames(trSamp) <- "newname2"

32voto

Ricardo Saporta Puntos 22951

Esta es una vieja pregunta, pero vale la pena señalar que ahora puedes usar setnames de la data.table paquete.

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)

21voto

alexplanation Puntos 433

Esto también se puede hacer usando el sistema de Hadley plyr paquete, y el rename función.

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

Puedes renombrar por el nombre (sin saber la posición) y realizar varios renombramientos 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 luego puedes renombrar 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

9voto

NPE Puntos 169956

Inténtalo:

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X