R中strptime函数对于周年份的奇怪行为

3

有人能解释一下这个吗:

strptime(c("2010-01", "2010-02"), format="%Y-%W")
[1] "2010-05-21" "2010-05-21"

为什么是5月21日?我希望一年中的第一周和第二周(01和02)在一月份内... %W代表一年中的周数,不是吗?

ISOweek包中的ISOweek2date函数可以解决该问题:

library(ISOweek)
ISOweek2date(c("2010-W01-1", "2010-W02-1"))
[1] "2010-01-04" "2010-01-11"

哈哈,考虑到现在是5月22日,我应该把我的代码检入并停止工作了。 (感谢您的回答。) - stackoverflax
2个回答

3
今天是5月21日(至少在先前的信息中是这样)。当您没有提供足够的信息以获取确切的日期时,R会使用当前的日期时间值来填充 - 例如:-
strptime("2010",format="%Y")
#[1] "2010-05-22 EST"

strptime(c("2010-01", "2010-02"), format="%Y-%W")
#[1] "2010-05-22 EST" "2010-05-22 EST"

3
为了得到与ISOweek2date相同的结果,你需要在时间字符串中给予strptimeISOweek2date相同的时间细节信息和格式。
因此,在时间字符串中添加“-1”来表示每周的第一天,并在格式字符串中添加-%w,可以得到与ISOweek2date相同的结果。
strptime(c("2010-01-1", "2010-02-1"), format="%Y-%W-%w")
#[1] "2010-01-04" "2010-01-11"

如上所述,如果没有足够的信息,你将得到当前日期。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接