Search code examples
rstringr

how to add characters to a string at a position defined by regular expression?


I have a vector:

c("b040_p001_e001_DMSO_01.raw", "b040_p001_e001_DMSO_02.raw", 
"b040_p001_e001_DMSO_03.raw", "b040_p001_e001_DMSO_04.raw", "b040_p001_e001_DMSO_05.raw", 
"b040_p001_e001_DOX_01.raw", "b040_p001_e001_DOX_02.raw", "b040_p001_e001_DOX_03.raw", 
"b040_p001_e001_DOX_04.raw", "b040_p001_e001_DOX_05.raw", "b040_p001_e001_IAA_01.raw", 
"b040_p001_e001_IAA_02.raw", "b040_p001_e001_IAA_03.raw", "b040_p001_e001_IAA_04.raw", 
"b040_p001_e001_IAA_05.raw", "b040_p001_e001_MK1775_01.raw", 
"b040_p001_e001_MK1775_02.raw", "b040_p001_e001_MK1775_03.raw", 
"b040_p001_e001_MK1775_04.raw", "b040_p001_e001_MK1775_05.raw", 
"b040_p001_e001_pool_01.raw", "b040_p001_e001_pool_02.raw", "b040_p001_e001_pool_03.raw", 
"b040_p001_e001_pool_04.raw")

for each element I would like to replace the 4th "_" with "_PE". E.g. for "b040_p001_e001_DMSO_01.raw" I would like to get "b040_p001_e001_DMSO_PE01.raw". So I need replacement, but conditional on regular expression. What is the most elegant way to do this?


Solution

  • library(stringr)
    c("b040_p001_e001_DMSO_01.raw", "b040_p001_e001_DMSO_02.raw", 
      "b040_p001_e001_DMSO_03.raw", "b040_p001_e001_DMSO_04.raw", "b040_p001_e001_DMSO_05.raw", 
      "b040_p001_e001_DOX_01.raw", "b040_p001_e001_DOX_02.raw", "b040_p001_e001_DOX_03.raw", 
      "b040_p001_e001_DOX_04.raw", "b040_p001_e001_DOX_05.raw", "b040_p001_e001_IAA_01.raw", 
      "b040_p001_e001_IAA_02.raw", "b040_p001_e001_IAA_03.raw", "b040_p001_e001_IAA_04.raw", 
      "b040_p001_e001_IAA_05.raw", "b040_p001_e001_MK1775_01.raw", 
      "b040_p001_e001_MK1775_02.raw", "b040_p001_e001_MK1775_03.raw", 
      "b040_p001_e001_MK1775_04.raw", "b040_p001_e001_MK1775_05.raw", 
      "b040_p001_e001_pool_01.raw", "b040_p001_e001_pool_02.raw", "b040_p001_e001_pool_03.raw", 
      "b040_p001_e001_pool_04.raw") |>
      str_replace_all('(.*)(_)(\\d{2}\\.raw)', '\\1_PE\\3')
    
    
     [1] "b040_p001_e001_DMSO_PE01.raw"   "b040_p001_e001_DMSO_PE02.raw"   "b040_p001_e001_DMSO_PE03.raw"   "b040_p001_e001_DMSO_PE04.raw"  
     [5] "b040_p001_e001_DMSO_PE05.raw"   "b040_p001_e001_DOX_PE01.raw"    "b040_p001_e001_DOX_PE02.raw"    "b040_p001_e001_DOX_PE03.raw"   
     [9] "b040_p001_e001_DOX_PE04.raw"    "b040_p001_e001_DOX_PE05.raw"    "b040_p001_e001_IAA_PE01.raw"    "b040_p001_e001_IAA_PE02.raw"   
    [13] "b040_p001_e001_IAA_PE03.raw"    "b040_p001_e001_IAA_PE04.raw"    "b040_p001_e001_IAA_PE05.raw"    "b040_p001_e001_MK1775_PE01.raw"
    [17] "b040_p001_e001_MK1775_PE02.raw" "b040_p001_e001_MK1775_PE03.raw" "b040_p001_e001_MK1775_PE04.raw" "b040_p001_e001_MK1775_PE05.raw"
    [21] "b040_p001_e001_pool_PE01.raw"   "b040_p001_e001_pool_PE02.raw"   "b040_p001_e001_pool_PE03.raw"   "b040_p001_e001_pool_PE04.raw"