Renombrar columnas en R con la función rename() de dplyr
La función rename
de dplyr puede utilizarse para cambiar los nombres de las columnas de un data frame. Además, rename_with
permite renombrar un conjunto de columnas utilizando una función.
Sintaxis
La función rename
modifica los nombres de las columnas utilizando la sintaxis nombre_nuevo = nombre_antiguo
mientras que rename_with
toma una función (.fn
) para transformar los nombres de un conjunto de columnas (.cols
, todas por defecto).
# Nuevos nombres de columna
rename(.data, nombre_nuevo = nombre_antiguo)
# Renombra las columnas seleccionadas (todas por defecto) en base a una función
rename_with(.data, .fn, .cols)
Renombrar una columna
Para este tutorial utilizaremos el conjunto de datos band_instruments
de dplyr
, que incluye dos columnas llamadas name
y plays
.
Considerando que quieres renombrar la primera columna a "Nombre"
puedes ejecutar el siguiente comando:
library(dplyr)
# Renombrar 'name' como 'Nombre'
df_2 <- band_instruments %>%
rename("Nombre" = name)
df_2
# A tibble: 3 × 2
Nombre plays
<chr> <chr>
1 John guitar
2 Paul bass
3 Keith guitar
Observa que también puedes renombrar columnas según su índice. El siguiente ejemplo ilustra cómo renombrar la segunda columna del conjunto de datos.
library(dplyr)
# Renombrar la segunda columna como 'Segunda columna'
df_2 <- band_instruments %>%
rename("Segunda columna" = 2)
df_2
# A tibble: 3 × 2
name `Segunda columna`
<chr> <chr>
1 John guitar
2 Paul bass
3 Keith guitar
Renombrar varias columnas
Es posible renombrar varias columnas a la vez añadiendo más expresiones del tipo nombre_nuevo = nombre_antiguo
a la función separadas por coma. Lo siguiente renombra la columna name
como Nombre
y la columna plays
como Instrumento
.
library(dplyr)
# Renombrar 'name' como 'Nombre'
# Renombrar 'plays' como 'Instrumento'
df_2 <- band_instruments %>%
rename("Nombre" = "name",
"Instrumento" = "plays")
df_2
# A tibble: 3 × 2
Nombre Instrumento
<chr> <chr>
1 John guitar
2 Paul bass
3 Keith guitar
Una alternativa a lo anterior es utilizar un vector con los nombres nuevos y los antiguos junto con las funciones all_of
o any_of
. La diferencia es que any_of
no arrojará un error si algún “nombre antiguo” no está en el conjunto de datos.
library(dplyr)
# Renombra 'name' como 'Nombre artista' y 'plays' como 'Instrumento'
nombres <- c("Nombre artista" = "name", "Instrumento" = "plays")
df_2 <- band_instruments %>%
rename(all_of(nombres)) # O any_of(nombres)
df_2
# A tibble: 3 × 2
`Nombre artista` Instrumento
<chr> <chr>
1 John guitar
2 Paul bass
3 Keith guitar
Renombrar columnas en base a una función con rename_with
La función rename_with
renombra todas o un conjunto de columnas basándose en una función.
Renombrar todas las columnas
Por defecto, la función rename_with
renombrará todas las columnas basándose en la función de entrada. En el ejemplo siguiente, utilizamos la función toupper
para renombrar todas las columnas en mayúsculas.
library(dplyr)
# Renombrar todas las columnas con nombres en mayúsculas
df_2 <- band_instruments %>%
rename_with(toupper)
df_2
# A tibble: 3 × 2
NAME PLAYS
<chr> <chr>
1 John guitar
2 Paul bass
3 Keith guitar
Si la función de entrada toma más argumentos, como las funciones paste o paste0 necesitarás añadir ~
antes de la función y un punto .
para representar los nombres de las columnas. En el siguiente ejemplo también establecemos recycle0 = TRUE
para reciclar selecciones vacías si es necesario.
library(dplyr)
# Agregar un prefijo a las columnas
df_2 <- band_instruments %>%
rename_with(~paste0("A_", ., recycle0 = TRUE))
df_2
# A tibble: 3 × 2
A_name A_plays
<chr> <chr>
1 John guitar
2 Paul bass
3 Keith guitar
Ten en cuenta que también puedes introducir una función personalizada como la siguiente, que añade el prefijo "Nuevo_"
antes de cada nombre de columna.
library(dplyr)
funcion_personalizada <- function(x) {
paste0("Nuevo_", x)
}
# Añade un prefijo a los nombres de columna
df_2 <- band_instruments %>%
rename_with(funcion_personalizada)
df_2
# A tibble: 3 × 2
Nuevo_name Nuevo_plays
<chr> <chr>
1 John guitar
2 Paul bass
3 Keith guitar
Renombrar ciertas columnas
Por defecto .cols = everything()
, lo que significa que la función de entrada se aplica a todas las columnas de los datos. Sin embargo, puedes seleccionar las columnas deseadas utilizando funciones de selección como contains
, starts_with
, ends_with
, etc. Revisa la lista completa de funciones de ayuda para seleccionar columnas.
library(dplyr)
# Nombres de columna que contienen la cadena "nam" en mayúsculas
df_2 <- band_instruments %>%
rename_with(toupper, .cols = contains("nam"))
df_2
# A tibble: 3 × 2
NAME plays
<chr> <chr>
1 John guitar
2 Paul bass
3 Keith guitar