Schnellste Weg zum extrahieren von Datum von Datum und Zeit in der R

Ich habe eine Spalte mit Daten, die als Zeichen im format 10/17/2017 12:00:00 AM. Ich will nur den date-Teil, d.h. 2017-10-17. Ich bin mit -

df$ReportDate = as.Date(df$ReportDate, format = "%m/%d/%Y %I:%M:%S %p") 
df$ReportDate = as.Date(format(df$ReportDate, "%Y-%m-%d"))

dies funktioniert, aber der dataframe hat über 5 Millionen Zeilen, so dass diese dauert knapp zwei Minuten.

  user  system elapsed 
104.73    0.55  105.46 

Ist es ein schneller und effizienter Weg, dies zu tun?

  • Eine excel-Datei hat über 5M Zeilen? Ich vermute, dass Ihr eine csv-Datei. versuchen Sie es mit fread aus datatable Paket
  • Sorry, ich glaube, meine Frage war unklar. Es ist nicht die Lektüre Prozess, der Zeit braucht, sondern nur die Datums-Konvertierung. Wird Bearbeiten.
  • Ist diese für Berechnungen oder für die Berichterstattung. Ihre zwei Zeilen code return entspricht Vektoren, zumindest für mich. df <- rep("8/31/2017 12:30:00 pm", 5e6); df <- as.Date(df, format = "%m/%d/%Y %I:%M:%S %p"); df1 <- as.Date(format(df, "%Y-%m-%d")); all(df == df1)
  • Könnten Sie substr zu extrahieren, die nur den date-Teil - lassen Sie die Zeit hinter sich - und dann verwenden Sie as.Date(df$ReportDate, format = "%m/%d/%Y) könnte schneller sein, ohne Analyse der Zeit als gut - ich bin mir nicht sicher. Ich bin mir auch nicht sicher, warum Sie mit as.Date zweimal. Nicht einmal genug?
  • Sorry, warum gehst du nicht versuchen, mit strptime
  • Ich würde auch vorschlagen, ein dupe: gibt es eine schnelle parser für Datum?. Die Antwort deutet auf eine etwa 2x speedup mit der fasttime Paket.
  • as.Date("10/17/2017 12:00:00 AM", format = "%m/%d/%Y") ist genug. "Jeder Eingabe-string verarbeitet wird, soweit erforderlich, für die festgelegten format ein: alle nachfolgenden Zeichen werden ignoriert."
  • Ich benutze als.Datum doppelt, weil die Daten ursprünglich gespeichert in character-Typ (der dataframe wird importiert mit fread). Also die erste Konvertierung konvertiert zum date-Objekt. Ich extrahieren Sie dann das Datum mit format wandelt den Typ zurück zum Charakter. Da ich es als date-Objekt für die weitere Arbeit, ich als.Datum ein zweites mal zu konvertieren in date-Objekt.
  • Das funktioniert! Und es dauert 4 Sekunden, also etwa 25x schneller. Wenn Sie einen Beitrag als Antwort werde ich akzeptieren.
  • Die zweite Konvertierung ist überflüssig. Wie Sie sagen, die erste Konvertierung-konvertiert in ein Date-Objekt. Das exakt gleiche Datum-Objekt, das die zweite Zeile konvertiert.

InformationsquelleAutor phil_t | 2017-10-17
Schreibe einen Kommentar