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".

Antworten auf die Frage(2)

Ihre Antwort auf die Frage