1. ホーム
  2. r

[解決済み] Rで文字列から日付に変換するための「標準的な曖昧さのない日付」形式は何ですか?

2022-01-28 13:37:26

質問

以下についてご検討ください。

$ R --vanilla

> as.Date("01 Jan 2000")
Error in charToDate(x) :
    character string is not in a standard unambiguous format

しかし、その日付は明らかに を標準的な曖昧さのない書式で表示します。なぜエラーメッセージが出るのでしょうか?

さらに悪いことに、あいまいな日付は警告もエラーもなく受け入れられ、間違って読まれてしまうようです。

> as.Date("01/01/2000")
[1] "0001-01-20"

検索したところ、このエラーメッセージを含む[R]タグの質問が他に28件見つかりました。すべて、フォーマットの指定を含む解決策や回避策が書かれています。この質問は、とにかく標準的な曖昧でないフォーマットがどこで定義されているのか、そしてそれを変更することができるのか、という点で異なっています。 誰もがこれらのメッセージを受け取るのでしょうか、それとも私だけなのでしょうか?もしかしたら、ロケールに関係しているのでしょうか?

つまり、フォーマットを指定する必要がない、より良い解決策はないのでしょうか?

29問の質問には"[R] standard unambiguous format"が含まれています。

> sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United Kingdom.1252
[2] LC_CTYPE=English_United Kingdom.1252
[3] LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United Kingdom.1252

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

解決方法は?

これは文書化された動作です。 から ?as.Date :

の形式を使用します。文字列。 指定しない場合は '"%Y-%m-%d"' 次に '"%Y/%m/%d"' を、NAでない最初の要素に適用します。 どちらもうまくいかなかった場合はエラーになります。

as.Date("01 Jan 2000") は、フォーマットが上記の2つのうちの1つでないため、エラーになります。 as.Date("01/01/2000") は、日付が上記の 2 つの形式のいずれでもないため、不正解となります。

私は、quot;standard unambiguous" は、quot;ISO-8601" を意味すると考えています(たとえ as.Date はISO-8601ではないので、それほど厳密ではありません)。

このエラーが発生した場合、解決策として、日付(または日付時間)のフォーマットを 詳細 セクションの ?strptime .

を確認します。 オーダー と同様に、変換仕様の セパレータ の書式と正確に対応しています。 入力 の文字列を使用します。また、日・月名や略語を含むデータは、ロケールによって変換が異なるので注意が必要です (以下の例を参照してください。 ?strptime と読みます。 ?LC_TIME も参照してください。 strptime , as.POSIXctas.Date 予期せぬ NA ).