2013-04-13 24 views
10

Wiele osób pyta, jak rozebrać czas i zachować datę, ale co z tym na odwrót? Biorąc pod uwagę:Pozbądź się daty i zatrzymaj czas.

myDateTime <- "11/02/2014 14:22:45" 

chciałbym zobaczyć:

myTime 
[1] "14:22:45" 

Strefa czasowa nie jest to konieczne.

Ja już próbowałem (z innych wskazań)

as.POSIXct(substr(myDateTime, 12,19),format="%H:%M:%S") 

[1] "2013-04-13 14:22:45 NZST"

Celem jest analiza zdarzeń zarejestrowanych przez kilka tylko dni po porach dnia.

Dzięki

Edit:

Okazuje się, że nie ma czystego „czas” przedmiot, więc za każdym razem musi mieć datę.

W końcu użyłem

as.POSIXct(as.numeric(as.POSIXct(myDateTime)) %% 86400, origin = "2000-01-01") 

zamiast roztworze charakter, bo muszę zrobić arytmetyczne na wynikach. To rozwiązanie jest podobne do mojego oryginalnego, z tym wyjątkiem, że datą można sterować konsekwentnie - "2000-01-01" w tym przypadku, podczas gdy moja próba właśnie wykorzystała aktualną datę w czasie wykonywania.

+1

W końcu natknąłem się na chron, który ma przedmiot klasy "razy". To sprawia, że ​​dodawanie jest znacznie łatwiejsze, np. 18:00 + 12:00 = 1,25 dnia. – nacnudus

+0

możesz również użyć pakietu 'hms' po wywołaniu' format() ', tj.' Hms :: as.hms (x) ' – Von

Odpowiedz

4

Jeśli czas w ciągu dnia GMT jest przydatny dla twojego problemu, możesz to uzyskać za pomocą %%, operatora pozostałego, biorąc pozostałą modulo 86400 (liczbę sekund w ciągu dnia).

stamps <- c("2013-04-12 19:00:00", "2010-04-01 19:00:01", "2018-06-18 19:00:02") 
as.numeric(as.POSIXct(stamps)) %% 86400 
## [1] 0 1 2 
+0

Uwielbiam magiczną liczbę ['60 * 60 * 24'] (https://www.google.com/search?q=60*60*24). – Jim

17

Myślę, że szukasz funkcji format.

(x <- strptime(myDateTime, format="%d/%m/%Y %H:%M:%S")) 
#[1] "2014-02-11 14:22:45" 
format(x, "%H:%M:%S") 
#[1] "14:22:45" 

To character nie „czas”, ale będzie działać z czymś aggregate jeśli to, co masz na myśli przez „analizowanie zdarzeń rejestrowanych w ciągu kilku dni od chwili jedyny dzień.”

+0

Mam do czynienia z problemem w funkcji strptime. Jeśli dodaję tekst tuż przed tą datą: strptime ("hello wt., 23 marca 2010 14:36:38 -0400", "% a,% d% b% Y% H:% M:% S% z ") #NA Każdy pomysł gdzie jest problem – Ankit

+0

@Ankit musisz to uwzględnić w argumencie' format'. Spróbuj tego: 'strptime (" hello wt., 23 marca 2010 14:36:38 -0400 "," cześć% a,% d% b% Y% H:% M:% S% z ")' – GSee

+0

@GSee Great odpowiedź. Tego właśnie szukałem. – Gandalf

Powiązane problemy