私は日付の文字表現のベクトルを持っています。フォーマットは主にdmY
(27-09-2013 など)、dmy
(27-09-13 など)、時にはいくつかb
またはB
月です。したがって、「ユーザーが異種の日時文字表現を処理するために複数のフォーマット順序を指定できるようにする」parse_date_time
パッケージでは、私にとって非常に便利な機能になる可能性があります。lubridate
ただし、日付と一緒に発生すると、日付のparse_date_time
解析に問題があるようです。単独で解析する場合、または私に関連する他の形式と一緒に解析する場合、問題なく動作します。このパターンは、@Peyton の回答hereへのコメントにも記載されています。早急な対応を提案されましたが、対応可能かお聞きしたいです。dmy
dmY
dmy
dmy
lubridate
dmy
ここでは、他の形式と一緒に形式で日付を解析し、orders
それに応じて指定する例をいくつか示します。
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
select_formats
議論はどうですか?申し訳ありませんが、ヘルプ ファイルのこのセクションを理解するのに苦労しています。そしてon SO : 0 の結果を検索します。select_formats
それでも、このセクションは関連しているように見えました:「デフォルトでは、ほとんどのフォーマットトークン (%) を持つフォーマットが選択され、%Y は 2.5 トークンとしてカウントされます (したがって、%y%m よりも優先されます)。」. dmy
だから私は(必死に)いくつかの追加の日付を試しました:
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
次に、guess_formats
関数 ( もlubridate
) がどのように処理dmy
されるかを確認しましたdmY
。
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
から?guess_formats
: y also matches Y
。から?parse_date_time
: y* Year without century (00–99 or 0–99). Also matches year with century (Y format)
。だから私は試しました:
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
したがって、と一緒guess_format
に対処できそうです。しかし、どうすれば同じことをするように言うことができますか? コメントやヘルプをお寄せいただきありがとうございます。dmy
dmY
parse_date_time
更新lubridate
バグレポート
に質問を投稿したところ、@vitoshka から「これはバグです」という迅速な返信がありました。