¿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:
-
names(df)
busca en todos los nombres en eldf
-
[names(df) == old.var.name]
extrae el nombre de la variable que desea verificar -
<- ''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"