web-dev-qa-db-fra.com

R: convertir les heures: minutes: secondes

J'ai un vecteur "Time.Training" au format heures: minutes: secondes (ex.

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

Je voudrais convertir ceci en minutes au format:

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

Je me demande si quelqu'un a une méthode simple pour le faire dans R.

Merci beaucoup.

Mat

13
Matt Jordan

Voici quelques alternatives:

1) Le package chron a un "times" classe dans laquelle 1 unité est un jour et il y a 60 * 24 minutes dans une journée donc:

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

donnant:

[1] 60 45 30 90

1a) Une autre approche utilisant chron est la suivante (donnant la même réponse):

library(chron)

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

2) Voici une approche utilisant read.table et multiplication matrice/vecteur. Aucun package n'est nécessaire:

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

(En utilisant "POSIXlt" est probablement l'approche la plus simple sans packages, mais une autre réponse le prévoit déjà.)

7
G. Grothendieck

Utilisation de 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
12
tospig

Essaye ça. Nous convertissons essentiellement en classe POSIXlt d'abord en collant une date réelle sur le vecteur en utilisant la fonction Sys.Date() (car il n'y a pas de classe horaire dans la base R) puis en utilisant hour et les arguments min pour obtenir la sortie

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

Utilisez 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
8
Perceptron