Przetwarzaj daty w formacie dmy razem z dmY używając parse_date_time

Mam wektor reprezentacji znaków dat, gdzie najczęściej są formatydmY (np. 27-09-2013),dmy (np. 27-09-13), a czasami niektóreb lubB miesięcy. A zatem,parse_date_time w opakowaniulubridate który „pozwala użytkownikowi określić kilka rozkazów formatowania w celu obsługi heterogenicznych reprezentacji znaków czasu i godziny” może być dla mnie bardzo przydatną funkcją.

Wydaje się jednak, żeparse_date_time ma problem z analiządmy daty, kiedy występują razemdmY Daktyle. Podczas analizowaniadmy sam lubdmy razem z innymi formatami, które są dla mnie odpowiednie, działa dobrze. Ten wzorzec odnotowano również w komentarzu do odpowiedzi @ Peytonatutaj. Zasugerowano szybką poprawkę, ale chciałbym zapytać, czy jest to możliwelubridate.

Tutaj pokazuję przykłady, w których staram się analizować datydmy format razem z innymi formatami i określanieorders odpowiednio.

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

A co zselect_formats argument? Przykro mi to mówić, ale trudno mi zrozumieć tę sekcję pliku pomocy. I aszukaćselect_formats Na tak: 0 wyników. Mimo to ta sekcja wydawała się istotna: „Domyślnie wybrane są formaty z większością formujących tockenów (%), a% Y liczy się jako 2,5 tockensa (dzięki czemu może mieć priorytet nad% y% m).”. Więc (desperacko) próbowałem z dodatkowymidmy Daktyle:

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

Następnie sprawdziłem, jakguess_formats funkcja (także wlubridate) obsługiwanedmy razem zdmY:

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   

Z?guess_formats: y also matches Y. Z?parse_date_time: y* Year without century (00–99 or 0–99). Also matches year with century (Y format). Próbowałem więc:

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

A zatem,guess_format wydaje się być w stanie sobie z tym poradzićdmy razem zdmY. Ale jak mogę to powiedziećparse_date_time zrobić to samo? Z góry dziękuję za wszelkie komentarze lub pomoc.

Aktualizacja Wysłałem pytanie nalubridate Zgłoszenie błędui otrzymałem szybką odpowiedź od @vitoshka: „To jest błąd”.

questionAnswers(2)

yourAnswerToTheQuestion