Home > database >  Splicing names in a list, and adding characters to a specific string?
Splicing names in a list, and adding characters to a specific string?

Time:02-16

Hello there: I currently have a list of file names (100s) which are separated by multiple "/" at certain points. I would like to find the last "/" in each name and replace it with "/Old". A quick example of what I have tried:

I have managed to do it for a single file name in the list but can't seem to apply it to the whole list.

Test<- "Cars/sedan/Camry" 

Then I know I tried finding the last "/" in the name I tried the following :

Last <- tail(gregexpr("/", Test)[[1]], n= 1)
str_sub(Test, Last, Last)<- "/Old"

Which gives me

Test[1] "Cars/sedan/OldCamry"

Which is exactly what I need but I am having troubling applying tail and gregexpr to my list of names so that it does it all at the same time.

Thanks for any help!

Apologies for my poor formatting still adjusting.

CodePudding user response:

If your file names are in a character vector you can use str_replace() from the stringr package for this:

items <- c(
  "Cars/sedan/Camry",
  "Cars/sedan/XJ8",
  "Cars/SUV/Cayenne"
)

stringr::str_replace(items, pattern = "([^/] $)", replacement = "Old\\1")
[1] "Cars/sedan/OldCamry" "Cars/sedan/OldXJ8"   "Cars/SUV/OldCayenne"

CodePudding user response:

Keeping a stringi function as an alternative.

If your dataframe is "df" and your text is in column named "text.

library(stringi)
    df %>% 
      mutate(new_text=stringi::stri_replace_last_fixed(text, '/', '/Old '))
  • Related