2012-06-13 7 views
12

Próbuję znaleźć prosty sposób formatowania danych wyjściowych z difftime na HH: MM: SS.ms. Do tej pory nie spotkałem się z niczym, co mnie zaskoczyło.czas w formacie, aby wyświetlić godziny, minuty, sekundy

Zrobiłem napisać funkcję poniżej, która prawie to robi. Ograniczeniem jest przedstawienie liczb jako znaczących pojedynczych cyfr. np. 2 godz., 3 min., 4,5secs staje się "2: 3: 4,5" zamiast "02: 03: 04.5"

Czy ktoś ma lepszą sugestię?

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

spójrz na '? Sprintf' – GSee

+0

@GSee, sprintf jest świetny. Z pewnością będę go używał w przyszłości. Wielkie dzięki. –

Odpowiedz

10

Oprócz @ komentarzu GSEE użytkownika, można użyć funkcję tak:

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

dziękuję bardzo, to o wiele ładniej. Jestem nieco zdezorientowany przez "." przed "POSIXct", więc będę musiał zrobić trochę więcej czytania, ale działa znakomicie. Jestem całkiem nowy dla R i naprawdę doceniam twoją pomoc. –

+1

@ get-there: to tylko prosta funkcja, która tworzy obiekt "POSIXct" z wektora numerycznego. –

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

Jest to kod. Ale ten kod przekształca dane w sekundach, ale wynik powinien być łańcuchem czasu.