onhalu
onhalu

Reputation: 745

Time with chars conversion

I have this vector

time = c("2m 14,8s", "1h 47m 46,9s", "34,7s")

And I would like to get this (convert time to secs)

time = c(134.8, 6466.9, 34.7)

I try lapply that split my string and find character that indicates hours or minutes

lapply(str_split(sub(",", ".", time), " "), function(x) 
  ifelse(grepl("h", x), sub("[a-z]", "", x) * 120, 
  ifelse(grepl("m", x), sub("[a-z]", "", x) * 60, NULL)))

but this error occurs

non-numeric argument to binary operator

and my second problem is that I don't know how to sum output

Upvotes: 1

Views: 32

Answers (1)

Darren Tsai
Darren Tsai

Reputation: 35604

You need to replace ',' with '.' and convert the abbreviations of hours, minutes, and seconds to upper-case characters so that as.duration() from lubridate can recognize and change them to a duration.

library(lubridate)

as.numeric(as.duration(toupper(sub(',', '.', time))), "seconds")

# [1]  134.8 6466.9   34.7

Upvotes: 1

Related Questions