Home > Software engineering >  Add character to specific value in rows by condition
Add character to specific value in rows by condition

Time:04-13

lets say we have following data:

    df1 = data.frame(cm= c('10129', '21120', '123456','345239'), 
                     num=c(6,6,6,6))

 >  df1

cm      num
10129    6
21120    6
123456   6
345      4

as you see the length of some boxes in the cm column is 6 digits and some of 5 digits. I want to code the following: if the number of digits in the cm column is less than number in num column, add 0 value in the front to get the given output:

cm      num
010129    6
021120    6
123456    6
0345      4

CodePudding user response:

You can use str_pad

library(tidyverse)

df1 %>% mutate(cm = str_pad(cm, num, "left", "0"))
#>       cm num
#> 1 010129   6
#> 2 021120   6
#> 3 123456   6
#> 4   0345   4

Created on 2022-04-13 by the reprex package (v2.0.1)


Input Data

df1 <- data.frame(cm  = c('10129', '21120', '123456','345'), num = c(6,6,6,4))

df1
#>       cm num
#> 1  10129   6
#> 2  21120   6
#> 3 123456   6
#> 4    345   4

CodePudding user response:

Perhaps simplest using dplyr and nchar:

library(dplyr)
df1 %>% mutate(cm = if_else(nchar(cm) < num, paste0(0, cm), cm))
      cm num
1  10129   6
2  21120   6
3 123456   6
4 345239   6

CodePudding user response:

The other tidyverse/dplyr answers are nicer, but if you want to stick to base R for some reason:

df1$cm <- ifelse(nchar(df1$cm) < df1$num, paste0('0', df1$cm), df1$cm)

df1
#>       cm num
#> 1 010129   6
#> 2 021120   6
#> 3 123456   6
#> 4 345239   6
  • Related