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.
I'm sure I'm missing something with formatC() or sprintf()
4 messages · z2.0, William Dunlap, Sarah Goslee +1 more
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
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of z2.0
Sent: Thursday, February 23, 2012 11:16 AM
To: r-help at r-project.org
Subject: [R] I'm sure I'm missing something with formatC() or sprintf()
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.
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
You said that the values are already character - that's the key. Compare:
sprintf("%05s", "2018")
[1] " 2018"
sprintf("%05d", 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:
sprintf("%05d", as.numeric("2018"))
[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:
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.
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
On 23-Feb-2012 z2.0 wrote:
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
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