2017-02-09 14 views
6

mam problem z datami w R. Definiowanie T1 i T2 jako dat w formacie POSIXct lub POSIXlt z 6 ułamków sekund:Różnica pomiędzy datami w R

op <- options(digits.secs = 6) 
T1 = strptime("2015.10.10 12:00:00.150150", "%Y.%m.%d %H:%M:%OS") 
T2 = strptime("2015.10.10 16:30:15.212412", "%Y.%m.%d %H:%M:%OS") 

Jak uzyskać różnicę pomiędzy T1 i T2 w ten format:

format = "%H:%M:%OS" 

Na przykład różnica pomiędzy określonymi datami jest:

diff = "04:30:15.062262" 

próbowałem innego podejścia es, ale nie udało się.

Moje próby:

T1 = strptime("2015.10.10 12:00:00.150150", "%Y.%m.%d %H:%M:%OS") 
T2 = strptime("2015.10.10 16:30:15.212412", "%Y.%m.%d %H:%M:%OS") 
h = difftime(T2,T1, units = "hours") 
m = difftime(T2,T1, units = "mins") 
s = difftime(T2,T1, units = "secs") 

Ale nie wiem jak dostać fractionals.

+3

Proszę pokazać nam, co próbowałem. Wtedy wiemy, czy musimy ulepszyć istniejące rozwiązanie, czy też zapewnić zupełnie nowe. Jako ogólną wskazówkę, używam pakietu 'lubridate' dla wszystkiego związanego z czasem i datami. Myślę, że studiowanie dokumentacji tego pakietu da ci daleko. –

+0

Hm, to jest dobre pytanie! Spodziewałem się, że 'as.difftime (T2 - T1, format = '% H:% M:% OS')' działa, ale tak nie jest. Nie rozumiem głosów w dół ... – drmariod

+0

Z 'lubridate' jest dobra funkcja, aby uzyskać podobny wynik, ale nie dokładnie taki sam format ...' lubridate :: seconds_to_period (difftime (T2, T1, units = ' secs ')) ' – drmariod

Odpowiedz

6

kod jest samo-wytłumaczalne

x <- as.numeric(difftime(T2,T1,units = "sec")) # diff in sec 
hrs <- floor(x/3600) # get the hours 
x <- x%%3600   # update the x after removing the hrs(in sec) 
min <- floor(x/60) # get the minutes 
sec <- x%%60   # get the sec 

paste(hrs,min,sec,sep= ":") 
# [1] "4:30:15.0622620582581" 
+1

Potrzebuję tylko 6 ułamków sekund, ale łatwo jest wyciąć ten ciąg. Dziękuję, to działa. –

+1

@AslanBayramkulov yeah ... 'sprintf',' format() 'wszystko by ci pomóc! –

+0

@AslanBayramkulov mind checking [this] (http://stackoverflow.com/help/someone-answers) –