151

The following code

a <- seq(1,101,25)
b <- paste("name", 1:length(a), sep = "_")

produces this output:

"name_1"  "name_26"  "name_51"  "name_76"  "name_101"

I'd like to have the same width of all values which means for me to fill the values with zeros like this:

"name_001"  "name_026"  "name_051"  "name_076"  "name_101"

How do I handle that?

(This question is related to this one.)

Braiam
  • 1
  • 11
  • 50
  • 74
ahs85
  • 1,877
  • 2
  • 13
  • 11

1 Answers1

247

There are several solutions to this.

One of them is to use sprintf. This uses C style formatting codes embedded in a character string to indicate the format of any other arguments passed to it. For example, the formatting code %3d means format a number as integer of width 3:

a <- seq(1,101,25)
sprintf("name_%03d", a)
[1] "name_001" "name_026" "name_051" "name_076" "name_101"

Another is formatC and paste:

paste("name", formatC(a, width=3, flag="0"), sep="_")
[1] "name_001" "name_026" "name_051" "name_076" "name_101"
Frank
  • 65,012
  • 8
  • 95
  • 173
Andrie
  • 170,733
  • 42
  • 434
  • 486