2015-03-15 16 views
9

Mam wektor „Time.Training” w formacie godziny: minuty: sekundy (npR: Konwersja godziny: minuty: sekundy

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

Chciałbym przekonwertować to do minut w formacie:

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

Zastanawiam się, czy ktoś posiada prosty sposób robić to w R.

Wielkie dzięki.

Matt

+1

Opcja ' Time.Training <- c (1:00:00, 0:45:00, 0:30:00, 1:30:00) 'nie działa. czy możesz użyć 'dput (Time.Training)'? – tospig

+0

Wektor Time.Training jest pobierany z Arkuszy Google za pomocą adresu URL. Przychodzi do R w formacie hh: mm: ss. Mając nadzieję na konwersję, mogę obliczyć obciążenie treningowe dla sportowca, ale potrzebuję tego w kilka minut. –

+0

Cytaty są wymagane. – tospig

Odpowiedz

6

Oto kilka alternatyw:

1) CH Pakiet ron ma "times" klasy, w której jedna jednostka jest dzień i jest 60 * 24 minut na dzień, tak:

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

podaniem:

[1] 60 45 30 90 

1a) Inny sposób korzystania Kron jest następujące (dając ta sama odpowiedź):

library(chron) 

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

2) Oto podejście za pomocą read.table i mnożenie macierzy/wektora. potrzebne żadne pakiety są:

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

(Korzystanie "POSIXlt" jest chyba podejście najbardziej prosta bez pakietów, ale inna odpowiedź już przewiduje, że.)

8

Spróbuj tego. W zasadzie konwersji do POSIXlt klasy najpierw przez wklejenie prawdziwe datę do wektora przy użyciu funkcji Sys.Date() (ponieważ nie ma klasy godzin w bazie R), a następnie za pomocą hour i min argumentów w celu osiągnięcia ekranu o

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

Tabela danych nosi nazwę "obciążenie", a zmienna nazywa się "Time.Spent.Training". Użyłem poleceń: attach (load), a następnie Res <- as.POSIXlt (paste (Sys.Date(), Time.Spent.Training)). To dało wektor dat 2015-03-15. Wydaje mi się, że nie dostaję czasu od tego –

+0

Musisz wywołać swoją kolumnę ze swojego zestawu danych. Spróbuj 'load $ Time.Spent.Training' instaed po prostu' Time.Spent.Training'. –

4

Korzystanie 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

To zadziałało. Dokładny kod użyłem: library (lubridate); res <- hms (load $ Time.Spent.Training); load $ Time.Minutes <-hour (res) * 60 + minute (res). Dziękuję Ci. –

+1

Nie ma za co. Na twoim przykładzie podanym w pytaniu @David Arenburg metoda również działa. Jeśli chcesz uzyskać odpowiedzi na podstawie rzeczywistych danych, powinieneś rozważyć użycie 'dput()' (przynajmniej w podzbiorze danych). – tospig

3

Zastosowanie 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