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"
$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.1Sie 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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist jetzt, dass Ihr format-string-Staaten die Daten umfassen das Jahr mit Jahrhundert, wo Ihre Daten enthalten nur ein Jahr ohne Jahrhundert. Sie müssen verwenden Sie die
%y
Platzhalter, nicht der%Y
.Ankündigung R bekommt es Recht, wenn Sie verwenden die korrekten Platzhalter; Kleinbuchstaben y.
Was passiert mit
%Y
wenn Sie nicht über ein Jahr mit Jahrhundert scheint OS abhängig. Wie Sie sehen können, auf Linux (Fedora 22) ich bekomme keine Polsterung des Jahres Teil in der Erwägung, dass Sie sehen, zero-padding.InformationsquelleAutor Gavin Simpson