Search code examples
rdataframer-colnames

Renaming columns if a specific character string doesn't exist


I'm looking to rename colnames to include the characters _16S_sed if they're not present. For example I have the dataset

> dput(dataframe1)
structure(list(GL11_DN_1_16S_sed = structure(1:3, .Label = c("val1", 
"val2", "val3"), class = "factor"), GL12_UP_3_16S_sed = structure(1:3, .Label = c("val1", 
"val2", "val3"), class = "factor"), GL13_1_DN = structure(1:3, .Label = c("val1", 
"val2", "val3"), class = "factor")), class = "data.frame", row.names = c(NA, 
-3L))

where the third column needs the characters _16S_sed. TIA


Solution

  • library(tidyverse)
    
    df %>%  
      rename_with(~ if_else(str_detect(.x, "_16S_sed"), .x, str_c(.x, "_16S_sed")))
    
    # A tibble: 3 × 3
      GL11_DN_1_16S_sed GL12_UP_3_16S_sed GL13_1_DN_16S_sed
      <fct>             <fct>             <fct>            
    1 val1              val1              val1             
    2 val2              val2              val2             
    3 val3              val3              val3    
    
      
    

    Glimpsed:

    Rows: 3
    Columns: 3
    $ GL11_DN_1_16S_sed <fct> val1, val2, val3
    $ GL12_UP_3_16S_sed <fct> val1, val2, val3
    $ GL13_1_DN_16S_sed <fct> val1, val2, val3