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
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à.)
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
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
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