Rename columns in R with the rename() function from dplyr
 
            
            
            
The rename function from dplyr can be used to alter column names of a data frame. In addition, rename_with allows to rename columns using a function.
Syntax
The rename function alters column names using the syntax new_name = old_name while rename_with takes a function (.fn) to transform the column names from a set of columns (.cols, all by default).
# Set new column names
rename(.data, new_name = old_name)
# Rename the selected columns (all by default) based on a function
rename_with(.data, .fn, .cols)Rename a single column
For this tutorial we will utilize the band_instruments dataset from dplyr, which includes two columns named name and plays.
Considering that you want to rename the first column to "First Name" you can execute the following command:
library(dplyr)
# Rename 'name' as 'First Name'
df_2 <- band_instruments %>%
  rename("First Name" = name)
df_2  `First Name` plays 
  <chr>        <chr> 
1 John         guitar
2 Paul         bass  
3 Keith        guitar
Notice that you can also rename columns by index. The following example illustrates how to rename the second column of the data set.
library(dplyr)
# Rename the second column as 'Second column'
df_2 <- band_instruments %>%
  rename("Second column" = 2)
df_2# A tibble: 3 × 2
  name  `Second column`
  <chr> <chr>          
1 John  guitar         
2 Paul  bass           
3 Keith guitar  
Rename multiple columns
It is possible to rename multiple columns at once by adding more new_name = old_name expressions to the function separated by comma. The following renames the column name as Member and the column plays as Instrument.
library(dplyr)
# Rename 'name' as 'Member'
# Rename 'plays' as 'Instrument'
df_2 <- band_instruments %>%
  rename("Member" = "name",
         "Instrument" = "plays")
df_2# A tibble: 3 × 2
  Member Instrument
  <chr>  <chr>     
1 John   guitar    
2 Paul   bass      
3 Keith  guitar  
An alternative to the previous is to use a named vector with the old names and new names in conjunction with all_of or any_of. The difference is that any_of won’t throw an error if any “old name” is not on the dataset.
library(dplyr)
# Rename 'name' as 'Member name' and 'plays' as 'Instrument'
names <- c("Member name" = "name", "Instrument" = "plays")
df_2 <- band_instruments %>%
  rename(all_of(names)) # Or any_of(names)
df_2# A tibble: 3 × 2
  `Member name` Instrument
  <chr>         <chr>     
1 John          guitar    
2 Paul          bass      
3 Keith         guitar   
Rename columns using a function with rename_with
The rename_with function renames all or a set of columns based on a function.
Rename all columns
By default, the rename_with function will rename all columns based on the input function. In the example below, we use the toupper function to rename all the columns in uppercase.
library(dplyr)
# Rename all the columns with the names in uppercase
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
If the input function takes more arguments, such as paste or paste0 functions you will need to add ~ before the function and a dot . to represent the column names. In the following example we also set recycle0 = TRUE to recycle empty selections if needed.
library(dplyr)
# Add a prefix to the existing columns
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  
Note that you can also input custom function as the following, which adds "New_" as prefix of each column name.
library(dplyr)
custom_function <- function(x) {
  paste0("New_", x)
}
# Add a prefix to the existing columns
df_2 <- band_instruments %>%
  rename_with(custom_function)
df_2# A tibble: 3 × 2
  New_name New_plays
  <chr>    <chr>    
1 John     guitar   
2 Paul     bass     
3 Keith    guitar  
Rename specific columns
By default .cols = everything(), which means that the input function is applied to all the columns of the data. However, you can select the desired columns by using helper functions such as contains, starts_with, ends_with etc. See the full list of helper functions to select columns.
library(dplyr)
# Column names containing the string "nam" to upper case
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 
 
         
         
         
   
  