One way to pad with initial zeros is to convert your strings to integers and format the integers: > sprintf("%04d", as.integer(mytimes)) [1] "1334" "2310" "0039" "2300" "1556" "0003" "0404" [8] "0037" "1320" "0004" "0211" "2320" It has the added benefit that the call to as.integer will warn you if any supposed integers don't look like integers. If you use this approach you don't need the call to sub(): > tmp <- as.integer(mytimes) > sprintf("%02d:%02d", tmp%/%100, tmp%%100) [1] "13:34" "23:10" "00:39" "23:00" "15:56" "00:03" [7] "04:04" "00:37" "13:20" "00:04" "02:11" "23:20" You could also check that tmp%/%100 (the hour) and tmp%%100 (the minute) are in their expected ranges before calling sprintf.
Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > -----Original Message----- > From: Dan Abner [mailto:dan.abne...@gmail.com] > Sent: Thursday, January 26, 2012 8:55 AM > To: William Dunlap > Cc: r-help@r-project.org > Subject: Re: [R] Inserting a character into a character string XXXX > > Hi Bill, > > Thanks very much for your response. > > Can you suggest an approach for the "pre"-padding? Here is a more > respresentative sample of the values: > > mytimes<-scan(what="") > 1334 > 2310 > 39 > 2300 > 1556 > 3 > 404 > 37 > 1320 > 4 > 211 > 2320 > > > Thanks! > > Dan > > > > On Thu, Jan 26, 2012 at 10:41 AM, William Dunlap <wdun...@tibco.com> wrote: > > > sub("([[:digit:]]{2,2})$", ":\\1", mytimes) > > [1] "14:57" "14:57" "13:10" "11:58" "1:37" "18:55" > > > > That will convert "05" to ":05" and will do nothing > > to "5". Pad with 0's before calling sub if that is > > required. > > > > Bill Dunlap > > Spotfire, TIBCO Software > > wdunlap tibco.com > > > >> -----Original Message----- > >> From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] > >> On Behalf Of Dan Abner > >> Sent: Thursday, January 26, 2012 6:50 AM > >> To: r-help@r-project.org > >> Subject: [R] Inserting a character into a character string XXXX > >> > >> Hello everyone, > >> > >> I have a character vector of 24 hour time values in the format hm > >> without the delimiting ":". How can I insert the ":" immediately to > >> the left of the second digit from the right? > >> > >> mytimes<-scan(what="") > >> 1457 > >> 1457 > >> 1310 > >> 1158 > >> 137 > >> 1855 > >> > >> > >> Thanks! > >> > >> Dan > >> > >> ______________________________________________ > >> R-help@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. ______________________________________________ R-help@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.