日付ベクトルに2桁の年がある場合、mdy()
は00から68の間を21stセンチュリー年に、69から99を20thセンチュリー年に変換します。たとえば、次のように2桁の年を4桁の年に変換するよりエレガントな方法がありますか?
library(lubridate)
mdy(c("1/2/54","1/2/68","1/2/69","1/2/99","1/2/04"))
は、次のような出力が得られます。
Multiple format matches with 5 successes: %m/%d/%y, %m/%d/%Y.
Using date format %m/%d/%y.
[1] "2054-01-02 UTC" "2068-01-02 UTC" "1969-01-02 UTC" "1999-01-02 UTC" "2004-01-02 UTC"
私は1954年から1968年に2054年と2068年を回すために間違った日付から100を減算することにより、事後にこれを修正することができます。しかしそこにありますより洗練されたエラーの少ない2桁の日付の解析方法を使用して、解析処理自体が正しく処理されるようにします。
アップデート:@JoshuaUlrichはstrptime
に私を指摘した後私は私と同様の問題を扱っている、this questionを見つけましたが、基本R.それは次のようになりRの日付の扱いに素晴らしい追加のように思える
を使用して日付解析関数内の2桁の日付に対する世紀選択のカットオフを処理するためのいくつかの方法。ここで
技術的には、日付は正確に解析されています。「入力時に、値00から68までは20と69から99の接頭辞が付きます - それは2004年と2008年のPOSIX標準で指定された動作です)。 '?parse_date'は、形式の'?strptime'を簡単に表示します。 –
私はより正確でなければなりませんでした。私は、 'lubridate'にバグがあることを暗示するつもりはないが、2桁の年月のあいまいさのために、パッケージの自然な振る舞いによって不正確な4桁の年が生じることになる。所望の結果 ")を得ることができる。私は、2桁の日付の所与の範囲に対して所望の世紀を与える「スイッチ」または「カットオフ」値を指定するために、「ルブリッド」内に何らかの方法があることを望んでいました。 – eipi10
lubridateのgithubページに機能リクエストを提出することをお勧めします。 – Spacedman