Was sind die "standard eindeutig date" - Formate für string-to-date-Umwandlung in R?
Bitte beachten Sie die folgenden
$ R --vanilla
> as.Date("01 Jan 2000")
Error in charToDate(x) :
character string is not in a standard unambiguous format
Aber das Datum deutlich ist in einem standard-format eindeutig. Warum die Fehlermeldung?
Schlimmer, ein vieldeutiges Datum ist offenbar akzeptiert, ohne Warnung oder Fehlermeldung, und dann Lesen Sie falsch!
> as.Date("01/01/2000")
[1] "0001-01-20"
Habe ich gesucht-und gefunden 28 andere Fragen in der [R] - tag mit dieser Fehlermeldung. Mit Lösungen und workarounds, mit Angabe des formats, iiuc. Diese Frage ist Verschieden, dass ich Frage, wo sind die standard eindeutig definierten Formate sowieso, und können Sie verändert werden? Hat jeder bekommen diese Meldungen, oder ist es nur mich? Vielleicht ist es an der locale-bezogenen?
In anderen Worten, gibt es eine bessere Lösung, als dass das format angeben?
29 Fragen, die mit "[R] standard-eindeutig-format"
> sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United Kingdom.1252
[2] LC_CTYPE=English_United Kingdom.1252
[3] LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United Kingdom.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
- die Beurteilung durch die definition der Funktion von
as.Date.character
die Eingabe wird nur getestet, für diese beiden Formate:"%Y-%m-%d"
und"%Y/%m/%d"
. Wenn es mit einem von Ihnen es zu sein scheint, als "eindeutig". - Ich lese auch" scheint zu implizieren, ist die Antwort offensichtlichen in
?as.Date
. Wo geht es dabei helfen? - Danke, das scheint die Antwort sein. Würden Sie bitte hinzufügen, dann kann ich akzeptieren.
- Wohl "Jan 24 1949" und "24 Jan 1949" wäre eindeutig, aber Sie sind sicherlich Anglo-centric. Doch es gibt auch Werte für 'Monat.abb", die im Anglo-centric als gut, so ein Fall könnte gemacht werden, für diese Werte ergänzt werden, in Fällen, in denen :
strptime(xx, f <- "%d $B %Y", tz = "GMT")
oderstrptime(xx, f <- "%B $d %Y", tz = "GMT")
zurückgegebenen Werte. (Ich will damit nicht sagen, dassmonth.abb
verwendet wird für die Abstimmung zu %B da die docs sagen, die passende locale-spezifisch.) - wo die Hilfe-Seite sagt format Eine Zeichenkette. Wenn nicht angegeben, wird es versuchen, "%Y-%m-%d", dann "%Y/%m/%d" auf dem ersten nicht-NA-element, und geben eine Fehlermeldung aus, wenn weder funktioniert ich meine, wirklich, es war nett von Joshua in diesem post, wir sind aber auch nicht auf /. hier. Sie haben zu Lesen TFM jetzt und dann.
- Einige von uns Reise bis hin und wieder. Danke für den kick, während ich unten bin. In dieser Frage bekam ich schon ein paar Sachen Recht: ich sessionInfo(), suchte ich, erzählt Sie das, was ich suchte und enthalten einen link, hielt ich es als consise wie möglich. Ich verpasste ein line-in ?als.Datum und geben Sie mir die TFM-Behandlung. Wir können nicht alle so perfekt sind, wie Sie die ganze Zeit.
- sorry, wenn ich nach unten kam, schwer. Ich denke, die flamosity begann, als Sie erschien, um zu verwirren "eindeutig um ein einigermassen gebildeter Mensch" mit "eindeutig zu einem Armen hilflosen Stück code" . 🙁
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dokumentiert ist diese Verhalten. Von
?as.Date
:as.Date("01 Jan 2000")
ergibt eine Fehlermeldung, da das format nicht, eine der zwei oben aufgeführten.as.Date("01/01/2000")
ergibt eine falsche Antwort, weil das Datum nicht in einem der beiden Formate oben aufgeführt sind.Nehme ich den "standard-eindeutig" zu verstehen, "ISO-8601" (obwohl
as.Date
ist nicht so streng, wie "%m/%d/%Y" nicht im ISO-8601).Wenn Sie diese Fehlermeldung erhalten, ist die Lösung, um das format Ihres Datums (oder datetimes) sind, verwenden Sie die Formate beschrieben, in
?strptime
. Verwenden Sie Besondere Sorgfalt, wenn Sie Ihre Daten enthalten Tag/Monat Namen und/oder Abkürzungen, die Umstellung ist abhängig von Ihrem Gebietsschema (siehe die Beispiele in?strptime
und Lesen?LC_TIME
)."character string is not either %Y-%m-%d or %Y/%m/%d"
??as.Date
(+1). Allerdings wird die Fehlermeldung "standard eindeutiges format" ist ironisch, mehrdeutig, zu dem die 23 vorherigen Fragen attestieren. Eine direkte Fehlermeldung wie "format nicht erkannt wird, finden Sie in der Dokumentation" kann die user experience zu verbessern. Auch glaube ich nicht, "01/01/2000" ist nach ISO-8601 ("2000-01-01" ist nach ISO-8601), die zusätzlich zu den Zweideutigkeit.as.Date
nicht beschweren "01/01/2000" ist unvereinbar mit der Fehlermeldung.Als Ergänzung zu @JoshuaUlrich Antwort, hier ist die definition der Funktion
as.Date.character
:Also im Grunde, wenn beide
strptime(x, format="%Y-%m-%d")
undstrptime(x, format="%Y/%m/%d")
wirft einNA
es gilt als mehrdeutig und wenn nicht eindeutig.Ja, es gibt jetzt (also Ende 2016), Dank
anytime::anydate
von der jederzeit Paket.Nachfolgend finden Sie einige Beispiele von oben:
Als Sie sagte, diese sind in der Tat eindeutig und sollte einfach funktionieren. Und über
anydate()
Sie tun. Ohne format.anytime()
ist ebenso nützlich fürPOSIXct
.Konvertieren Sie das Datum ohne Angabe des aktuellen format bringen kann, diesen Fehler zu leicht.
Hier ist ein Beispiel:
Konvertieren ohne Angabe Format:
Konvertieren mit angegeben Format:
Dieser funktioniert perfekt für mich, egal, wie das Datum kodiert wurde zuvor.