は 2 桁の週番号の形式yyyy-ww
で週の日付データを持っています。までww
のデータ範囲。週数の規則は ISO 8601 であり、ウィキペディアの「週数」の記事でわかるように、1 年間で 53 週に達することもあります。たとえば、このシステムでは 2009 年は 53 週でした。この ISO 8601 カレンダーの週番号を参照してください。(他の年を参照してください。Wikipedia の記事によると、53 週目はかなりまれです。)2007-01
2010-30
基本的に、週の日付を読み込んでDate
オブジェクトに変換し、これを別の列に保存したいdata.frame
. テストとして、Date
オブジェクトを でyyyy-ww
フォーマットに再変換しformat([Date-object], format = "%Y-%W"
たところ、 でエラーが発生しました2009-53
。その週は によって日付として解釈されませんR
。(ISO 8601 標準で) 第 53 週を持たない他の年は のように正常に変換されますが、同様に (ISO 8601 標準で) 第 53 週を持たない2007-53
他の年も次のように失敗するため、これは非常に奇妙です。2008-53
次の最小限の例は、問題を示しています。
最小限の例:
dates <- c("2009-50", "2009-51", "2009-52", "2009-53", "2010-01", "2010-02")
as.Date(x = paste(dates, 1), format = "%Y-%W %w")
# [1] "2009-12-14" "2009-12-21" "2009-12-28" NA "2010-01-04"
# [6] "2010-01-11"
other.dates <- c("2007-53", "2008-53", "2009-53", "2010-53")
as.Date(x = paste(other.dates, 1), format = "%Y-%W %w")
# [1] "2007-12-31" NA NA NA
R
問題は、 ISO 8601 形式で週番号を受け入れるにはどうすればよいかということです。
注: この質問は、私が数時間苦労してきた問題を要約したものです。このようなさまざまな役立つ投稿を検索して見つけましたが、問題を解決するものはありませんでした。