'Convert hours:minutes:seconds to minutes

I have a vector "Time.Training" in the format hours:minutes:seconds (e.g.

Time.Training <- c("1:00:00", "0:45:00", "0:30:00", "1:30:00")

I would like to convert this into minutes in the format:

Time.Training.Minutes <- c(60, 45, 30, 90)

I'm wondering if someone has a straightforward method of doing this in R.

Many thanks.

Matt



Solution 1:[1]

Here are some alternatives:

1) The chron package has a "times" class in which 1 unit is a day and there are 60 * 24 minutes in a day so:

library(chron)
60 * 24 * as.numeric(times(Time.Training))

giving:

[1] 60 45 30 90

1a) Another approach using chron is the following (giving the same answer):

library(chron)

ch <- times(Time.training)
60 * hours(ch) + minutes(ch)

2) Here is an approach using read.table and matrix/vector multiplication. No packages are needed:

c(as.matrix(read.table(text = Time.Training, sep = ":")) %*% c(60, 1, 1/60))

(Using "POSIXlt" is probably the most straight-forward approach without packages but another answer already provides that.)

Solution 2:[2]

Using lubridate:

Time.Training<- c("1:00:00", "0:45:00", "0:30:00", "1:30:00")

library(lubridate)
res <- hms(Time.Training)        # format to 'hours:minutes:seconds'
hour(res)*60 + minute(res)       # convert hours to minutes, and add minutes
## [1] 60 45 30 90

Solution 3:[3]

Try this. We basically converting to POSIXlt class first by pasting a real date to the vector using the Sys.Date() function (because there is no hour class in base R) and then using hour and min arguments in order to achieve the output

Res <- as.POSIXlt(paste(Sys.Date(), Time.Training))
Res$hour*60 + Res$min
## [1] 60 45 30 90

Solution 4:[4]

Use as.difftime:

> Time.Training<- c("1:00:00", "0:45:00", "0:30:00", "1:30:00")
> strtoi(as.difftime(Time.Training, format = "%H:%M:%S", units = "mins"))
[1] 60 45 30 90

Solution 5:[5]

Taking the hour column from the date time column and create a new cloumn hour and give only hour data in that column 2011-01-01 00:00:01 Ans :

bikeshare$hour<-sapply(bikeshare$datetime,function(x){format(x,"%H")})

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 tospig
Solution 3 David Arenburg
Solution 4 Perceptron
Solution 5 tospig