Analysieren Sie Daten im Format dmy zusammen mit dmY mit parse_date_time
Ich habe einen Vektor für die Zeichendarstellung von Datumsangaben, wobei die meisten Formate vorliegendmY
(z. B. 27.09.2013),dmy
(z.B. 27-09-13) und gelegentlich einigeb
oderB
Monate. Somit,parse_date_time
im paketlubridate
"Ermöglicht es dem Benutzer, mehrere Formatreihenfolgen anzugeben, um heterogene Darstellungen von Datums- und Uhrzeitzeichen zu verarbeiten", könnte für mich eine sehr nützliche Funktion sein.
Es scheint jedoch soparse_date_time
hat Probleme beim Parsendmy
Daten, an denen sie zusammen mit auftretendmY
Termine. Beim Parsendmy
allein oderdmy
zusammen mit einigen anderen für mich relevanten Formaten funktioniert es einwandfrei. Dieses Muster wurde auch in einem Kommentar zu @ Peytons Antwort vermerktHier. Eine schnelle Lösung wurde vorgeschlagen, aber ich möchte fragen, ob es möglich ist, damit umzugehenlubridate
.
Hier zeige ich einige Beispiele, bei denen ich versuche, Daten zu analysierendmy
zusammen mit einigen anderen Formaten formatieren und angebenorders
entsprechend.
library(lubridate)
# version: lubridate_1.3.0
# regarding how date format is specified in 'orders':
# examples in ?parse_date_time
# parse_date_time(x, "ymd")
# parse_date_time(x, "%y%m%d")
# parse_date_time(x, "%y %m %d")
# these order strings are equivalent and parses the same way
# "Formatting orders might include arbitrary separators. These are discarded"
# dmy date only
parse_date_time(x = "27-09-13", orders = "d m y")
# [1] "2013-09-27 UTC"
# OK
# dmy & dBY
parse_date_time(c("27-09-13", "27 September 2013"), orders = c("d m y", "d B Y"))
# [1] "2013-09-27 UTC" "2013-09-27 UTC"
# OK
# dmy & dbY
parse_date_time(c("27-09-13", "27 Sep 2013"), orders = c("d m y", "d b Y"))
# [1] "2013-09-27 UTC" "2013-09-27 UTC"
# OK
# dmy & dmY
parse_date_time(c("27-09-13", "27-09-2013"), orders = c("d m y", "d m Y"))
# [1] "0013-09-27 UTC" "2013-09-27 UTC"
# not OK
# does order of the date components matter?
parse_date_time(c("2013-09-27", "13-09-13"), orders = c("Y m d", "y m d"))
# [1] "2013-09-27 UTC" "0013-09-27 UTC"
# no
Was ist mitselect_formats
Streit? Es tut mir leid, das zu sagen, aber ich kann diesen Abschnitt der Hilfedatei nur schwer verstehen. Und einsuchen nachselect_formats
auf SO: 0 Ergebnisse. Dennoch schien dieser Abschnitt relevant zu sein: "Standardmäßig sind die Formate mit den meisten Formatierungstoken (%) ausgewählt, und% Y zählt als 2,5 Token (damit es Vorrang vor% y% m haben kann)." Also habe ich es (verzweifelt) mit einigen zusätzlichen versuchtdmy
Termine:
parse_date_time(c("27-09-2013", rep("27-09-13", 10)), orders = c("d m y", "d m Y"))
# not OK. Tried also 100 dmy dates.
# does order in the vector matter?
parse_date_time(c(rep("27-09-13", 10), "27-09-2013"), orders = c("d m y", "d m Y"))
# no
Ich habe dann nachgesehen wie das gehtguess_formats
Funktion (auch inlubridate
) abgewickeltdmy
zusammen mitdmY
:
guess_formats(c("27-09-13", "27-09-2013"), c("dmy", "dmY"), print_matches = TRUE)
# dmy dmY
# [1,] "27-09-13" "%d-%m-%y" ""
# [2,] "27-09-2013" "%d-%m-%Y" "%d-%m-%Y"
# OK
Von?guess_formats
: y also matches Y
. Von?parse_date_time
: y* Year without century (00–99 or 0–99). Also matches year with century (Y format)
. Also habe ich versucht:
guess_formats(c("27-09-13", "27-09-2013"), c("dmy"), print_matches = TRUE)
# dmy
# [1,] "27-09-13" "%d-%m-%y"
# [2,] "27-09-2013" "%d-%m-%Y"
# OK
Somit,guess_format
scheint in der Lage zu sein, damit umzugehendmy
zusammen mitdmY
. Aber wie kann ich das sagen?parse_date_time
das Gleiche tun? Vielen Dank im Voraus für Kommentare oder Hilfe.
Aktualisieren Ich habe die Frage auf der gepostetlubridate
Fehlerberichtund bekam eine schnelle Antwort von @vitoshka: "Dies ist ein Fehler".