Renombrar columnas en R con la función rename() de dplyr

Renombrar columnas en R con 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

La función rename() de dplyr en R

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 

Cambiar los nombres de las columnas en R en base a su índice o posición utilizando la función rename() de dplyr

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    

Cambiar el nombre a varias columnas a la vez con dplyr

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 un vector con dplyr

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

La función rename_with() de dplyr

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  

Renombrar columnas con paste() o paste0() usando dplyr

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  

Cambiar los nombres de las columnas en R con dplyr

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 

Renombrar columnas específicas utilizando la función rename_with() de dplyr