2016-12-09 6 views
0

Ich versuche, diese Daten und Zeiten für die Analyse vorzubereiten. Die Zeit ist schwierig, weil sie in militärischer Zeit aus Litauen kommt (was 10 Stunden vor den USA liegt). meine Frage ist, wie man die Zeit umsetzt, um US-Zeit zu korrigieren? Wie teilt man die Spalte in zwei Spalten auf, die Datum und Uhrzeit trennen?Datum und Uhrzeit manipulieren in R

Hier ist mein Beispieldaten:

a <- c("10/4/2016 21:11","10/11/2016 19:53" ,"9/16/2016 0:39", 
    "8/17/2016 21:46","11/16/2016 9:37","11/29/2016 16:14", 
    "10/7/2016 20:14","9/16/2016 0:27","9/27/2016 23:10", 
    "2/24/2015 20:37","11/8/2016 21:05","5/25/2016 1:30", 
    "8/5/2016 0:41","8/22/2016 23:02","5/25/2016 0:43", 
    "9/28/2016 22:17","9/14/2016 22:58","8/25/2016 18:10","10/10/2016 16:55" ,"10/7/2016 0:11") 

df <- data.frame(Date=a, stringsAsFactors = F) 

Ich möchte:

>df 
    Date  Time 
1 2016-10-04 9:11 PM 
2 2016-10-11 6:53 PM 
3 2016-09-16 1:39 AM 
4 2016-08-17 9:46 PM 
+0

Normalerweise ist der Wunsch, eine einheitliche Datetime zu haben, aber ich denke diese Anfrage ist nicht neu. Sie sollten mehr suchen, bevor Sie weitere Fragen stellen. Die Zeiten werden als UCT-Zeiten in der Eingangsstufe gespeichert und der Ausgang ermöglicht das "Verschieben" von tz mit den tx- und usetz-Parametern zum Formatieren. –

Antwort

0

Der Ort, um über die Formatierung von Datum und Uhrzeit Werte ?strptime zu erlernen ist. Der Großteil des Wissens ist auf die Funktionen as.Date und format.Date und format.POSIXt anwendbar. Für die Anzeige der Zeit, müssen Sie die Eingabe richtig tun, dann die Ausgabe tun:

df2 <- data.frame(Date=as.Date(df$Date, format="%m/%d/%Y"), 
       Time=format(as.POSIXct(df$Date, format="%m/%d/%Y %H:%M"), 
           format="%I:%M %p")) 
> df2 
     Date  Time 
1 2016-10-04 09:11 PM 
2 2016-10-11 07:53 PM 
3 2016-09-16 12:39 AM 
4 2016-08-17 09:46 PM 
5 2016-11-16 09:37 AM 
snipped output 

Jede der "%_" Artikel wird auf einem separaten Eintrag der ?strptime Hilfeseite beschrieben. Sie können Literale wie "?", ":" Und Leerzeichen hinzufügen, um den Mustererkennungsprozess korrekt auszuführen. Das lubridate -Paket hat einige zusätzliche Funktionen, wenn Ihre Formatierung unregelmäßiger war. Es gibt auch das chron -Paket, das Trennung von Zeiten und Daten ermöglicht, aber es scheint nicht so viel in diesen Tagen verwendet werden.

Dies zeigt, wie in litauischer Militärzeit und Ausgabe als New_York Zeit zu lesen:

df2 <- data.frame(Date=as.Date(df$Date, format="%m/%d/%Y"), 
        Time=format(as.POSIXct(df$Date, format="%m/%d/%Y %H:%M", 
              usetz=TRUE, tz="Etc/GMT-2"), # input 
           "%I:%M %p", tz="EST5EDT")) # output 

Könnte auch verwenden tz="Europe/Vilnius" an der Eingangsstufe. Der feste Offset würde keine DST-Änderungen zulassen, während die "Europa/Vilnius" -Auswahl (je nachdem, was Ihre Systemkonfiguration der Olson-Datenbank unterstützt)

+1

Um die Zeitzonendifferenz zu behandeln, kann zum Beispiel die Funktion 'with_tz()' aus dem 'lubridate'-Paket verwendet werden (nachdem die litauische Zeitzone während des Parsens korrekt definiert wurde). Eine Liste der gültigen Zeitzonen kann durch Ausführen von 'OlsonNames()' gefunden werden. – mpjdem

+0

Wissen Sie, wie Sie den 10-Stunden-Zeitunterschied berücksichtigen? – mikeymike

+1

Lies es als litauische Zeit, vielleicht mit etwas wie tz = "Etc/GMT-3" und verwende 'format (..)' zur Ausgabe wie in meinen Kommentaren zu deiner Frage beschrieben. (Diese Information sollte mit ein wenig Suchen zugänglich gewesen sein und mpjdem hat Ihnen eine andere nützliche Ressource gegeben: 'lubridate :: with_tz'.) –