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