2012-06-13 20 views
12

Ich habe versucht, eine einfache Möglichkeit, die Formatierung die Ausgabe von difftime in HH zu finden: MM: SS.ms. Bisher bin ich auf nichts gestoßen, was mich überrascht hat.Format Zeitspanne zu zeigen, Stunden, Minuten, Sekunden

Ich habe die Funktion schreiben, unter dem es fast der Fall ist. Die Begrenzung ist die Darstellung der Zahlen als signifikante einzelne Ziffern. zB 2 h, 3mins wird 4.5secs "2: 3: 4,5" statt "02: 03: 04.5"

Hat jemand einen besseren Vorschlag?

format.timediff <- function(start_time) { 
    diff = as.numeric(difftime(Sys.time(), start_time, units="mins")) 
    hr <- diff%/%60 
    min <- floor(diff - hr * 60) 
    sec <- round(diff%%1 * 60,digits=2) 

    return(paste(hr,min,sec,sep=':')) 
} 
+1

Blick auf '? Sprintf' – GSee

+0

@GSee ist sprintf groß. Ich werde es definitiv in Zukunft verwenden. Danke vielmals. –

Antwort

10

Neben @ GSEE Kommentar, könnten Sie eine Funktion wie folgt verwendet werden:

f <- function(start_time) { 
    start_time <- as.POSIXct(start_time) 
    dt <- difftime(Sys.time(), start_time, units="secs") 
    # Since you only want the H:M:S, we can ignore the date... 
    # but you have to be careful about time-zone issues 
    format(.POSIXct(dt,tz="GMT"), "%H:%M:%S") 
} 
f(Sys.Date()) 
+1

vielen dank, das ist viel schöner. Ich bin etwas verwirrt von dem "." Vor 'POSIXct' muss ich noch mehr lesen, aber es funktioniert hervorragend. Ich bin ziemlich neu für R und schätze deine Hilfe sehr. –

+1

@ getting-there: Es ist nur eine einfache Funktion, die ein 'POSIXct'-Objekt aus einem numerischen Vektor konstruiert. –

0
Merge_Charge_Point$Duration<- difftime(Merge_Charge_Point$EndConnectionDateTime, Merge_Charge_Point$StartConnectionDateTime, units="secs") 

Dies ist der Code. Aber dieser Code wandelt die Daten in Sekunden um, aber das Ergebnis sollte ein Zeitstring sein.

Verwandte Themen