Home > Mobile >  Inserting 0's into the middle of a string until certain length in R
Inserting 0's into the middle of a string until certain length in R

Time:01-25

I want to add 0's into the middle of a string until a certain length.

e.g.

AB1
AB2
AB54

Would become:

AB0001
AB0002
AB0054

Thanks

CodePudding user response:

Using stringr::str_replace extract the numbers from the string and use sprintf to add 0's as prefix.

stringr::str_replace(df$V1, '\\d ', function(m) sprintf('s', m))
#[1] "AB0001" "AB0002" "AB0054"

Another way to write the same logic with str_pad instead of sprintf.

library(stringr)
str_replace(df$V1, '\\d ', function(m) str_pad(m, 4, pad = '0'))

data

df <- structure(list(V1 = c("AB1", "AB2", "AB54")), 
      class = "data.frame", row.names = c(NA, -3L))

CodePudding user response:

For a base R approach, we can try using strsplit on each input using the regex pattern (?<=[A-Z])(?=[0-9]), which will target the split between the letter and numbers potions. Then, we can left pad the number with zeroes to a width of 4 and paste together the two portions.

x <- c("AB1", "AB2", "AB54")
output <- sapply(x, function(x) {
    parts <- strsplit(x, "(?<=[A-Z])(?=[0-9])", perl=TRUE)[[1]]
    paste0(parts[1], sprintf("d", as.numeric(parts[2])))
})
output

     AB1      AB2     AB54
"AB0001" "AB0002" "AB0054"
  •  Tags:  
  • Related