Sé que si tengo un marco de datos con más de 1 columna, puedo usar
colnames(x) <- c("col1","col2")
cambiar el nombre de las columnas. ¿Cómo hago esto si es solo una columna? Es decir, 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]
drop=TRUE
argumento predeterminado de[
, que hace que un objeto de "1 columna" se convierta en un vector ... y los vectores no lo tienencolnames
. Un ejemplo de lo que intentaste sería muy útil.Respuestas:
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:
fuente
"A,B,C,X,Y,Z"
donde quiero cambiarle el nombre aY
utilizartestData[379] <- "Y"
.Esta es una forma generalizada en la que no tiene que recordar la ubicación exacta de la variable:
Este código hace más o menos lo siguiente:
names(df)
examina 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.fuente
[names(df) == old.var.name]
realidad devuelve un vector con valores verdadero / falso. Por lo tanto, tiene el potencial de cambiar varios nombres de columna si, por ejemplo, se utilizan expresiones regulares.names(df) = sub('pattern', 'replacement', names(df))
. De lo contrario, intentaría establecer varias columnas con el mismo nombre.fuente
colnames(GWASDATA_RAWSELECTION)[colnames(GWASDATA_RAWSELECTION)=="^snp$"] <- "Marker"
porque la columna no ha cambiado de nombre. Si hagonames(GWASDATA_RAWSELECTION)[names(GWASDATA_RAWSELECTION)=="snp"] <- "Marker"
que se cambia el nombre. ¿Qué me estoy perdiendo?Esta es una vieja pregunta, pero vale la pena señalar que ahora puede usarla
setnames
desde eldata.table
paquete.fuente
setNames
desde la base R.Esto también se puede hacer usando el
plyr
paquete de Hadley y larename
función.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, puede terminar con:
Que luego puede renombrar en un solo paso usando:
fuente
rename
ahora también es una función en eldplyr
paquete.Creo que la mejor manera de cambiar el nombre de las columnas es usar el paquete dplyr de esta manera:
Funciona igual para renombrar una o varias columnas en cualquier conjunto de datos.
fuente
Me gusta el siguiente estilo para cambiar el nombre de los nombres de columna del marco de datos uno por uno.
dónde
regresa por el índice de la columna específica.
fuente
which()
no es necesario.Creo que la forma más conveniente de cambiar el nombre de una sola columna es usar
dplyr::rename_at
:fuente
Puede usar el
rename.vars
en elgdata
paquete.Esto es particularmente útil cuando tiene que cambiar más de un nombre de variable o si desea agregar o agregar texto a los nombres de las variables, luego puede hacer algo como:
Para ver un ejemplo de agregar texto a un subconjunto de nombres de variables, consulte: https://stackoverflow.com/a/28870000/180892
fuente
Tratar:
fuente
"A,B,C,X,Y,Z"
donde quiero cambiarle el nombre aY
utilizartestData[379] <- "Y"
.Es probable que esto ya esté disponible, pero estaba jugando con renombrar campos mientras buscaba una solución y probé esto por capricho. Trabajó para mis propósitos.
Editar comienza aquí ...
Esto también funciona.
fuente
rename
proviene la función?Si sabe que su marco de datos tiene solo una columna, puede usar:
names(trSamp) <- "newname2"
fuente
También puede probar 'upData' del paquete 'Hmisc'.
library(Hmisc)
trSamp = upData(trSamp, rename=c(sample.trainer.index..10000. = 'newname2'))
fuente
La pregunta del OP ha sido bien y verdaderamente respondida. Sin embargo, aquí hay un truco que puede ser útil en algunas situaciones: coincidencia parcial del nombre de la columna, independientemente de su posición en un marco de datos:
Coincidencia parcial en el nombre:
Otro ejemplo: coincidencia parcial en presencia de "puntuación":
Estos fueron ejemplos con los que tuve que lidiar hoy, pensé que valdría la pena compartirlos.
fuente
Encontré el
colnames()
argumento más fácil https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/row%2Bcolnamesseleccione alguna columna del marco de datos
y renombra la columna seleccionada en orden,
verifique los nombres y los valores para asegurarse
fuente
Podemos usar
rename_with
para renombrar columnas con una función (stringr
funciones, por ejemplo).Considere los siguientes datos
df_1
:Cambie el nombre de todas las variables con
dplyr::everything()
:Cambiar el nombre de partículas nombre con algunos
dplyr
verbos (starts_with
,ends_with
,contains
,matches
, ...).Ejemplo con
.
(x
variables):Cambiar el nombre de la clase con muchas funciones de prueba de clase, como
is.integer
,is.numeric
,is.factor
...Ejemplo con
is.integer
(y
):La advertencia:
No es relevante, ya que es solo una inconsistencia
seq_along(.)
con la función de reemplazo.fuente
Simplemente agregaría una nueva columna al marco de datos con el nombre que quiero y obtendría los datos de la columna existente. Me gusta esto:
¡entonces quito la vieja columna! Me gusta esto:
¡Este código puede parecer tonto! Pero funciona perfectamente ...
fuente
Simplemente cambiaría el nombre de una columna al conjunto de datos con el nuevo nombre que quiero con el siguiente código: nombres (conjunto de datos) [index_value] <- "new_col_name"
fuente
fuente