Frage

Ich bin relativ neu in R, aber dies ist das erste Mal, das ich je hatte mit Datum Konvertierungen beschäftigen. Ich lese in meinen Daten aus einer CSV (mit read.table ()), aber ich die Daten kurzgeschlossen mein Problem hervorzuheben. Wenn in R lesen, das Datumsfeld ist Charakter.

Einfach, erhalten die meisten meinen Termin richtig dazu gezwungen, mit Ausnahme von einigen wenigen Fällen. Das folgende Beispiel wird hoffentlich zeigen Ihnen, was los ist.

# my attempt to coerce the date -- uses the stringr package
prods.all$Date2 <- as.Date(str_sub(prods.all$Date, 1, 
                str_locate(prods.all$Date, " ")[1]-1), 
                "%m/%d/%Y")

# grab two rows to highlight my issue
temp <- prods.all[c(1925:1926), c(1,8)]

> temp
                   Date      Date2
1925  10/9/2009 0:00:00 2009-10-09
1926 10/15/2009 0:00:00 0200-10-15

Wie Sie sehen können, das Jahr von einigen der Termine ist ungenau. Das Muster scheint aufzutreten, wenn der Tag ein zweistelliges ist.

Ich habe durch ein paar Bücher geschaut und versucht, Google, einen besseren Weg, aber alles scheint darauf hinzudeuten, dass meine Daten nicht korrekt auf Eingabe formatiert.

Da, wie mächtig R ist, ich Figur, dass es eine sehr einfache Möglichkeit, meine Spalte zu zwingen, gültige Daten zu sein und dass ich eine sehr nahe liegende Lösung bin mit Blick auf.

Jede Hilfe werden Sie zur Verfügung stellen können sehr geschätzt.

War es hilfreich?

Lösung

Sie können Dinge sein overcomplicating, gibt es keinen Grund Sie die stringr Paket benötigen?

 df <- data.frame(Date = c("10/9/2009 0:00:00", "10/15/2009 0:00:00"))
 as.Date(df$Date, "%m/%d/%Y %H:%M:%S")

[1] "2009-10-09" "2009-10-15"

Allgemeiner und wenn Sie die Zeitkomponente benötigen auch die Verwendung strptime:

strptime(df$Date, "%m/%d/%Y %H:%M:%S")

Ich vermute, was Ihre tatsächlichen Daten aus den Teilergebnissen aussehen könnte dir geben.

Andere Tipps

Der einfachste Weg ist die Verwendung lubridate:

library(lubridate)
prods.all$Date2 <- mdy(prods.all$Date2)

Diese Funktion automatisch Objekte der Klasse POSIXct zurück und wird entweder mit Faktoren oder Zeichen arbeiten.

library(lubridate) 35:: Wenn Ihr Datumsformat wie diese '04 / 24/2017 05 ist 00'then Änderung wie es unten prods.all$Date2<-gsub("/","-",prods.all$Date2)  dann ändern Sie das Datumsformat parse_date_time(prods.all$Date2, orders="mdy hms")

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top