Konvertieren Faktor zu date-Objekt R ohne NA

Frage: wie kann ich umwandeln einer factor zu einem date Objekt ohne NA Werte.

Hier ist ein ähnlicher Beitrag: Konvertieren Faktor, um Datum/Zeit R

In diesem post, den Benutzer in ein character Objekt vor einem date. Ich bin immer NA Werte bei der Konvertierung in character Objekt mit as.character innerhalb der as.Date Funktion.

Ich habe eine Spalte in der dataframe mit dem Datum im Faktor-format mit verschiedenen Nummern vorkommen. Hier ist die Informationen, die in den Daten.frame.

> head(fraud, 5)
  TRANSACTION.DATE TRANSACTION.AMOUNT AIR.TRAVEL.DATE POSTING.DATE
1 2/27/14                  25.00                 <NA>          2/28/14
2 2/28/14                  25.00                 <NA>          2/28/14
3 2/27/14                  25.00                 <NA>          2/28/14
4 2/27/14                  20.00              2/27/14          2/28/14
5 2/27/14                  12.13                 <NA>          2/28/14

> str(fraud$TRANSACTION.DATE)
 Factor w/ 519 levels "1/1/14","1/1/15",..: 228 230 228 228 228 230 226 228 230 228 ...

> summary(fraud$TRANSACTION.DATE, 5)
9/30/14 9/17/14 11/4/14 9/23/14 (Other) 
    197     187     171     160   19221 

Umwandlung der Faktor, um ein date Objekt geführt NA Werte.

> fraud$TRANSACTION.DATE <- as.Date(as.character(fraud$TRANSACTION.DATE), 
+                                       format = "%m/%d/%Y")
> head(fraud$TRANSACTION.DATE, 5)
[1] NA NA NA NA NA

Überprüfen, ob die as.character Funktion gearbeitet.

> fraud$TRANSACTION.DATE <- as.character(fraud$TRANSACTION.DATE)
> head(fraud$TRANSACTION.DATE)
[1] NA NA NA NA NA NA

EDIT: ich als.Datum-Funktion aber habe die falsche Formatierung

> fraud$TRANSACTION.DATE <- as.Date(fraud$TRANSACTION.DATE, format = "%m/%d/%Y")
> str(fraud$TRANSACTION.DATE)
 Date[1:19936], format: "0014-02-27" "0014-02-28" "0014-02-27" "0014-02-27" "0014-02-27" ...
> head(fraud$TRANSACTION.DATE, 5)
[1] "0014-02-27" "0014-02-28" "0014-02-27" "0014-02-27" "0014-02-27"

EDIT 2: Hier ist die dput Wert

> dput(droplevels(head(fraud$TRANSACTION.DATE)))
structure(c(1L, 2L, 1L, 1L, 1L, 2L), .Label = c("2/27/14", "2/28/14"
), class = "factor")

Lösung: mit %statt y %Y

> fraud$TRANSACTION.DATE <- as.Date(fraud$TRANSACTION.DATE, "%m/%d/%y")
> head(fraud$TRANSACTION.DATE, 5)
[1] "2014-02-27" "2014-02-28" "2014-02-27" "2014-02-27" "2014-02-27"
Sie sind mit $d statt %d . Auch as.Date genug sein wird, d.h. wie.Zeichen nicht erforderlich. also as.Date(fraud$TRANSACTION.DATE, '%m/%d/%y') #[1] "2014-02-27" "2014-02-28" "2014-02-27" "2014-02-27" "2014-02-27"
ein dput-Ausgabe kann mehr reproduzierbar. also dput(droplevels(head(fraud)))
Ich habe versucht, mit factor Spalte und es funktionierte gut, ohne Sie zu konvertieren, um character. Ich bin mit R 3.2.1
Sie brauchen nicht as.character() da es eine S3-Methode für die Klasse "factor" die effektiv Anrufe as.Date(as.character(x)) für Sie.
Zum formatieren der Datumsangaben (R verwenden YYYY-MM-DD für anzeigen) Blick auf strftime() für details. Beachten Sie jedoch, dass Sie es behalten wollen als "Date" Objekt und nur das format, wenn erforderlich, zum Plotten oder in Tabellen, die Sie bei der Ausgabe.

InformationsquelleAutor Scott Davis | 2015-07-28

Schreibe einen Kommentar