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

Sarah Goslee sarah.goslee at gmail.com
Thu Feb 23 20:51:53 CET 2012


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.



-- 
Sarah Goslee
http://www.stringpage.com
http://www.sarahgoslee.com
http://www.functionaldiversity.org



More information about the R-help mailing list