Skip to content

I'm sure I'm missing something with formatC() or sprintf()

4 messages · z2.0, William Dunlap, Sarah Goslee +1 more

#
I have a four-digit string I want to convert to five digits. Take the
following frame:

zip
2108
60321
60321
22030
91910

I need row 1 to read '02108'. This forum directed me to formatC previously
(thanks!) That usually works but, for some reason, it's not in this
instance. Neither of the syntaxes below change '2108' to '02108.' The values
in cand_receipts[,1] are of type 'character.'

cand_receipts[,1] <- formatC(cand_receipts[,1], width = 5, format = 's',
flag = '0')
cand_receipts[,1] <- sprintf("%05s", cand_receipts[,1])

 Any thoughts?

Thanks,

Zack





--
View this message in context: http://r.789695.n4.nabble.com/I-m-sure-I-m-missing-something-with-formatC-or-sprintf-tp4414905p4414905.html
Sent from the R help mailing list archive at Nabble.com.
#
sprintf's "%<number>s" format descriptor ignores initial 0's in <number>,
in C's sprintf and in R's.  Here are 2 ways to do it:
  > z <- c("5", "45", "345", "2345", "12345")
  > sprintf("%05d", as.integer(z))
  [1] "00005" "00045" "00345" "02345" "12345"
  > gsub(" ", "0", sprintf("%5s", z))
  [1] "00005" "00045" "00345" "02345" "12345"

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
#
You said that the values are already character - that's the key.

Compare:
[1] " 2018"
[1] "02018"

Since they are already character, though, here's another option:
x <- c("2108", "60321", "22030") # part of your data
ifelse(nchar(x) == 4, paste("0", x, sep=""), x)
[1] "02108" "60321" "22030"

You could also use:
[1] "02018"

The help for sprintf says this, but not clearly:
    ?0? For numbers, pad to the field width with leading zeros.



Sarah
On Thu, Feb 23, 2012 at 2:16 PM, z2.0 <zack.abrahamson at gmail.com> wrote:

  
    
  
#
On 23-Feb-2012 z2.0 wrote:
For this (and similar cases):

  formatC(2108,width=5,flag="0")
  # [1] "02108"

For longer strings:

  formatC(2108,width=6,flag="0")
  # [1] "002108"

see ?formatC for more details (the way formatC() aggregates
information about the desired format is somewhat different
from the format syntax in C's printf() and related functions).

Ted.

-------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at wlandres.net>
Date: 23-Feb-2012  Time: 19:58:22
This message was sent by XFMail