2017-09-07 1 views
1

ich einen großen Datensatz habe (einige Millionen Beobachtungen), die eine Datumzeit-Variable mit einem inkonsistenten Format enthält: "% Y-% m-% d% H:% M:% s"; "% m /% d /% Y und% H:% M:% S".Formatierung inkonsistente Datetime variable

Hier ist, wie der Datensatz wie folgt aussieht:

df <- data.frame(var1 = c(1:6), 
    var2 = c("A", "B", "C", "A", "B", "C"), 
    datetime = c("2013-07-01 00:00:02", "2016-07-01 00:00:01", 
      "9/2/2014 00:01:20", "9/1/2014 00:00:25", 
      "1/1/2015 0:07", "6/1/2015 0:01")) 

Gibt es eine effiziente Möglichkeit, das Datetime-Variable in ein einzigartiges, konsistentes Datum Zeitformat zu formatieren?

+1

Wenn Sie nicht mehrdeutig Daten (wie 2014.09.02) haben, konnte man 'anytime' aus dem jederzeit Paket verwenden. Wie es ist, können Sie nur mit allen Formaten 'as.POSIXct' verwenden Sie in Ihren Daten haben und die Ergebnisse in ein Vektor fusionieren – Roland

Antwort

2

POSIXCT Lösung mit parse_date_time.

EDIT: mit @Akarsh Jain POSIXCT Formatierung für bessere Zeitausrichtung.

df$new_date <- parse_date_time(df$datetime, c("%Y-%m-%d %H:%M:%S", "%m/%d/%Y %H:%M:%S", "%m/%d/%Y %H:%M")) 
+0

Ja ... Ich war über diesen' df $ Datetime Sagar

+0

Ich habe gerade das gleiche @ D.sen gepostet. Zufällig. Ich hoffe es wird dir nichts ausmachen. –

+0

^Das ist eine bessere Antwort, da ich merke, dass meine Lösung die 7 Minuten auf 7 Sekunden anpasst. –

2

Sie können lubridate-Paket wie folgt verwenden.

lubridate::parse_date_time(x = df$datetime, c("ymd HMS","mdy HMS")) 

[1] "2013-07-01 00:00:02 UTC" "2016-07-01 00:00:01 UTC" "2014-09-02 00:01:20 UTC" 
[4] "2014-09-01 00:00:25 UTC" NA      NA      
Warning message: 
2 failed to parse. 

lubridate::parse_date_time(x = df$datetime, c("ymd HMS","mdy HMS","mdy HM")) 

[1] "2013-07-01 00:00:02 UTC" "2016-07-01 00:00:01 UTC" "2014-09-02 00:01:20 UTC" 
[4] "2014-09-01 00:00:25 UTC" "2015-01-01 00:07:00 UTC" "2015-06-01 00:01:00 UTC" 

Sie können Ihre Datum-Zeitformate angeben, wie erforderlich, zwei Beispiele vergleichen, kann ich erwähnt.

Hoffe das hilft Ihnen. :)