我有一些以yyyy-ww
的形式表示的周日期数据,其中ww
是两位数的周数。这些数据跨越了2007-01
到2010-30
。周计数约定是ISO 8601,你可以在维基百科的“周数”文章中看到,有时一年会有53个星期。例如,按照这个系统,2009年有53个星期,请参见此ISO 8601日历中的周数。 (查看其他年份;根据维基百科文章,第53周非常罕见。)
基本上,我想读入周日期,将其转换为Date
对象,并将其保存到data.frame
的单独列中。作为测试,我通过format([Date-object], format ="%Y-%W"
将Date
对象重新转换为yyyy-ww
格式,但在 2009-53
处出现错误。该周无法被R
解释为日期。这非常奇怪,因为其他年份(ISO 8601标准中没有第53周)可以正常转换,如2007-53
,而其他也没有第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格式的周数?
注意:这个问题总结了我几个小时来一直苦苦挣扎的问题。我已经搜索并找到了各种有用的帖子,例如这个,但都没有解决问题。
as.Date(x ="2009-01 01", format = "%Y-%W %w")
дёҺISOweek2date("2009-W01-1")
иҝӣиЎҢжҜ”иҫғпјҢдҪ иҝҳеә”иҜҘеј•з”Ёhelp(strptime)
дёӯе…ідәҺ%W
зҡ„жқЎзӣ®гҖӮ - RolandISOweek
实现了自己的算法,因为Windows的系统库中缺少一些东西)。 - Ben Bolkerhelp(strptime)
中有定义。 - RolandISOweek
依赖于%V
,而这在 Windows 中并未实现。因此,这确实是一个 Windows 的问题。正如在strptime
帮助文件中所写的那样。 - dynamo