2015-03-15 25 views
9

ho un vettore "Time.Training" nel formato ore: minuti: secondi (ad esempioR: Convertire ore: minuti: secondi

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

vorrei convertire questo in minuti nel formato:

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

mi chiedo se qualcuno ha un metodo semplice di fare questo in R.

Molte grazie.

Matt

+1

Il ' Time.Training <- c (1:00:00, 0:45:00, 0:30:00, 1:30:00) 'non funziona. puoi usare 'dput (Time.Training)'? – tospig

+0

Il vettore Time.Training viene estratto da Google Fogli utilizzando l'url. Entra in R nel formato hh: mm: ss. Sperando di convertirlo così posso calcolare un carico di allenamento per un atleta, ma ho bisogno di questo in pochi minuti. –

+0

Le virgolette sono quanto richiesto. – tospig

risposta

6

Ecco alcune alternative:

1) CH pacchetto ron ha una classe "times" in cui 1 unità è un giorno e ci sono 60 * 24 minuti in un giorno così:

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

dono:

[1] 60 45 30 90 

1a) altro approccio utilizza chron è il seguente (dare la stessa risposta):

library(chron) 

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

2) Ecco un approccio utilizzando read.table e moltiplicazione matrice/vettoriale. Nessun pacchetto sono necessari:

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

(Usando "POSIXlt" è probabilmente l'approccio più straight-forward, senza pacchetti, ma un'altra risposta prevede già che.)

8

Prova questo. Abbiamo praticamente conversione in POSIXlt prima classe incollando una data reale al vettore utilizzando la funzione Sys.Date() (perché non c'è classe ora nella base di R) e quindi utilizzando hour e min argomenti per ottenere la potenza

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

La tabella dati è denominata "carico" e la variabile è denominata "Time.Spent.Training". Ho usato i comandi: attach (load) seguito da Res <- as.POSIXlt (paste (Sys.Date(), Time.Spent.Training)). Questo ha dato un vettore di date 2015-03-15. Non riesco a ottenere tempo da questo –

+0

È necessario chiamare la colonna dal set di dati. Prova 'load $ Time.Spent.Training' instaed di solo' Time.Spent.Training'. –

4

utilizzando 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 
+1

Questo ha funzionato. Il codice esatto che ho usato era: library (lubridate); res <- hms (carica $ Time.Spent.Training); carica $ Time.Minutes <-hour (res) * 60 + minuto (res). Grazie. –

+1

Prego. Sul tuo esempio dato nella domanda @David anche il metodo di Arenburg funziona. Se vuoi ottenere risposte basate sui tuoi dati attuali, dovresti considerare l'uso di 'dput()' (almeno su un sottoinsieme di dati). – tospig

3

Uso 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 
Problemi correlati