ISO8601文字列をPOSIXtオブジェクトに解析するためのRの既存の実装はありますか?ISO8601仕様では、日付/時刻をさまざまな(重複しない)形式で印刷できるため、形式を検出してにフィードするために、正規表現の魔法を実行する必要がありますstrptime
。
これを適切に行うことは実際には非常に難しいかもしれませんが、最も一般的な形式を検出するものはすでに非常に役立ちます。私がこれに遭遇した最初の人だとはほとんど想像できませんが、良い実装を見つけるのに苦労しています。
厳密に言えば、できません。ISO 8601を十分に知っているので、ISO 8601を知っているだけでは、意味を明確に知るには不十分であるため、rやcran(またはそれらが何であるか)について何も知る必要はありません。それによって、特に短い形式で。
相手が使用しているISO8601のプロファイルを確認します。彼らがあなたが何について話しているのかわからない場合、あなたが上の段落で私が今言ったことを指摘するとき、あなたは彼らに好意を示すでしょう。他の場所で一度書いたように、
残念ながら、多くの人は「ISO 8601」を聞いたときによく知っている特定のプロファイルについて考えます。他の人は、8601を使用することは良いことだと知っていますが、実装の詳細についてはよく知りません。したがって、仕様または要件のドキュメントには8601が記載されている場合がありますが、それよりも明確ではありません。このような場合、「ISO 8601」と考える形式が正しい形式であると想定するのではなく、説明を求めることが重要です。
したがって、「「ISO 8601」は十分に具体的ではありません。あなたが何をしているのか、精度の限界は何かを正確に知る必要があります」と伝えます。(そして、おそらく1582より前の日付とおそらく0001より前の日付のポリシー、うるう秒のポリシー、およびその他のいくつかのポリシーは開いたままですが、標準です)
そうすれば、あなたが扱っているものは何でも十分に簡単でなければなりません。このあいまいさの点を除けば、それはかなり単純な標準です。これは、日付形式を定義するための標準として考えるべきであり、日付形式を定義するものは複数あります。
.parseISO8601
1つの実装については、xtsパッケージを参照してください。これが「箱から出して」うまくいくとは思えませんが、特定のニーズを実装する方法についての良いアイデアが得られるはずです。
これは有望に見えます:http://cran.r-project.org/web/packages/parsedate
parsedate:すべてのISO 8601形式を含む、さまざまな形式の日付を認識して解析します
形式を指定しなくても、日付を自動的に解析します。現在、gitdateパーサーが含まれています。また、すべてのISO8601形式を認識して解析することもできます。
t <- strptime("2013-08-20T14:56:37", "%FT%T")
ほとんどの場合、私にとっては十分に機能しました。ただし、すでに数分の1秒で失敗し、JonHannaが言及したすべての問題の解決策が含まれているわけではありません。(これにより、時間データ型の操作が非常に困難になります。)