2017-09-12 5 views
0

Ich möchte den Unterschied zwischen zwei Zeit-Sets berechnen. Ich kann das, aber ich bekomme nur den Unterschied in Dezimalzahlen und ich würde gerne wissen, wie man sie in das Format wie in "Minutes: Second" umwandelt.Wie Dezimal-Zeit in Zeit-Format konvertieren

Also, ich habe die Minuten und die Sekunden als Zeichen:

video_begin <- c("8:14", "4:47", "8:27", "4:59", "4:57", "7:51", "6:11", "5:30") 
video_end <- c("39:08", "47:10", "49:51", "44:31", "39:41", "47:12", "40:13", "46:52") 

ich sie in Zeitwerte mit as.POSIXct konvertieren, eine df machen und die Differenz als dritte Säule, leicht peasy hinzufügen .. .

video_begin <- as.POSIXct(video_begin, format = "%M:%S") 
video_end <- as.POSIXct(video_end, format = "%M:%S") 
video <- data.frame(video_begin, video_end) 
video$video_duration <- video_end - video_begin 

Und das ist, was ich für video bekommen:

video_begin   video_end   video_duration 
1 2017-09-12 00:08:14 2017-09-12 00:39:08 30.90000 mins 
2 2017-09-12 00:04:47 2017-09-12 00:47:10 42.38333 mins 
3 2017-09-12 00:08:27 2017-09-12 00:49:51 41.40000 mins 
4 2017-09-12 00:04:59 2017-09-12 00:44:31 39.53333 mins 
5 2017-09-12 00:04:57 2017-09-12 00:39:41 34.73333 mins 
6 2017-09-12 00:07:51 2017-09-12 00:47:12 39.35000 mins 
7 2017-09-12 00:06:11 2017-09-12 00:40:13 34.03333 mins 
8 2017-09-12 00:05:30 2017-09-12 00:46:52 41.36667 mins 

Wie ändere ich das Format von video$video_duration von Dezimal in das gleiche Format wie in video$video_begin und video$video_end: "Minuten: Sekunden" (Ich interessiere mich nicht für Tag, Monat, Jahr und Stunde)?

Ich habe versucht:

video$video_duration <- as.POSIXct(video$video_duration, format = "%M:%S") 

und

strptime(video$video_duration, format="%M:%S") 

aber nah ...

ich einige Antworten gefunden, aber ich bin nicht sehr zufrieden mit ihnen:

How convert decimal to POSIX time

Algorithm to convert Text time to Decimal Time

Gibt es nicht einen mehr ... handlichen und einfacheren Weg?

Danke!

Antwort

1

Eine weitere Option:

library(lubridate) 
video$video_duration <- as.numeric(video_end - video_begin, units = "secs") 
video$video_duration <- seconds_to_period(video$video_duration) 

      video_begin   video_end video_duration 
1 2017-09-12 00:08:14 2017-09-12 00:39:08  30M 54S 
2 2017-09-12 00:04:47 2017-09-12 00:47:10  42M 23S 
3 2017-09-12 00:08:27 2017-09-12 00:49:51  41M 24S 
4 2017-09-12 00:04:59 2017-09-12 00:44:31  39M 32S 
5 2017-09-12 00:04:57 2017-09-12 00:39:41  34M 44S 
6 2017-09-12 00:07:51 2017-09-12 00:47:12  39M 21S 
7 2017-09-12 00:06:11 2017-09-12 00:40:13   34M 2S 
8 2017-09-12 00:05:30 2017-09-12 00:46:52  41M 22S 
+1

Das war genau die Antwort, die ich suchte! Ich wusste, dass es einen Weg gab, es ohne viel Code zu machen. Vielen Dank! – KDBoom

1

Das schafft MM: SS-Format:

df$video_duration <- gsub('\\s+[[:alpha:]]{4}','',df$video_duration) 
x <- as.numeric(df$video_duration) 
paste(floor(x), round((x-floor(x))*60), sep=":") 

Ausgang:

[1] "30:54" "42:23" "41:24" "39:32" "34:44" "39:21" "34:2" "41:22" 
+0

Danke, das funktionieren könnte, aber ich war nach einer Antwort suchen, die ein bisschen beinhaltet weniger Codierung. Die anderen Antworten, die ich zuvor gefunden habe, haben ebenfalls funktioniert, aber sie waren alle nicht sehr "praktisch". Trotzdem danke! – KDBoom

1

difftime in einer Funktion eingewickelt Verwendung. Es mag eine elegantere Lösung geben, aber hey es funktioniert und ist flexibel.

time_diff <- function(time1, time2){ 
    hours <- difftime(time1, time2, units="hours") 
    minutes <- round(60 * (hours - floor(hours)), 0) 

    paste(floor(hours), minutes, sep=":") 
} 
time_diff(video_end, video_begin) 

gibt

[1] "0:31" "0:42" "0:41" "0:40" "0:35" "0:39" "0:34" "0:41" 
+0

Das könnte funktionieren, aber um ganz ehrlich zu sein, ist das ein bisschen zu viel für mich! :) Trotzdem danke! – KDBoom

Verwandte Themen