R + convert integer to hh: mm format using regex + gsub

interval is a subset of 5 minute intervals over a 25 hour period

> interval
 [1]   45   50   55  100  105  110  115  120  125  130  135 2035 2040 2045 2050 2055 2100 2105 2110 2115 2120 2125

      

I want to insert :

to put it during fomat that I can convert to time format

> gsub('^([0-9]{1,2})([0-9]{2})$', '\\1:\\2', interval)
 [1] "45"    "50"    "55"    "1:00"  "1:05"  "1:10"  "1:15"  "1:20"  "1:25"  "1:30"  "1:35"  "20:35" "20:40" "20:45"
[15] "20:50" "20:55" "21:00" "21:05" "21:10" "21:15" "21:20" "21:25"

      

This works for me for almost all of my examples.
How to get it so that it works with numbers "5"

..."45" "50" "55"

Found this duplicate here but it doesn't use gsub

+3


source to share


2 answers


An easy way to do this is to make sure all inputs are at least 4 characters long:



gsub('^([0-9]{1,2})([0-9]{2})$', '\\1:\\2', sprintf('%04d',interval))
# "00:45" "00:50" "00:55" "01:00" "01:05" "01:10" "01:15" "01:20" "01:25"
# "01:30" "01:35" "20:35" "20:40" "20:45" "20:50" "20:55" "21:00" "21:05"
# "21:10" "21:15" "21:20" "21:25"

      

+5


source


Usage sub

:



> sub('..\\K', ':', sprintf('%04d',interval), perl=T)
#  [1] "00:45" "00:50" "00:55" "01:00" "01:05" "01:10" "01:15" "01:20" "01:25"
# [10] "01:30" "01:35" "20:35" "20:40" "20:45" "20:50" "20:55" "21:00" "21:05"
# [19] "21:10" "21:15" "21:20" "21:25"

      

+2


source







All Articles