Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Correcting Time Format in R

I have a column of timestamp from a race; the time logs are given either in HH:MM:SS format or MM:SS format. I need to convert them from character to time format; I will be using as.POSIXct but first I am having issues dealing with the observations where the format is MM:SS as opposed to HH:MM:SS. When I apply as.POSIXct to the column, I get an error because all the observations don’t have the same format. How do I add the "00:" leading up to a "59:34" timestamp?

Time
"59:34"
"32:07"
"1:08:06"

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

Here’s a solution using lubridate::hms. If you want to use as.POSIXct, substitute your code for that.

It assumes that all values are either MM:SS or HH::MM::SS.

ts1 is the original values, ts2 pre-pended with "00:" where necessary and ts3 the final values.

library(dplyr)
library(stringr)
library(lubridate)

data.frame(ts1 = c("59:34", "32:07", "1:08:06")) %>% 
  mutate(ts2 = ifelse(str_count(ts1, ":") == 1, paste0("00:", ts1), ts1), 
         ts3 = hms(ts2))

Result:

      ts1      ts2      ts3
1   59:34 00:59:34  59M 34S
2   32:07 00:32:07   32M 7S
3 1:08:06  1:08:06 1H 8M 6S
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading