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"
>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