如何在R中解析年份+周数?

Kyl*_*ndt 17 datetime r

是否有一种很好的方法可以将一年+周数转换为R中的日期?我尝试过以下方法:

> as.POSIXct("2008 41", format="%Y %U")
[1] "2008-02-21 EST"
> as.POSIXct("2008 42", format="%Y %U")
[1] "2008-02-21 EST"
Run Code Online (Sandbox Code Playgroud)

根据?strftime:

%Y世纪.请注意,虽然原始公历中没有零,但ISO 8601:2004将其定义为有效(解释为1BC):请参阅http://en.wikipedia.org/wiki/0_(year).请注意,该标准还规定,在其日历中1582年之前的年份应仅在有关各方同意的情况下使用.

%U作为十进制数字的年份(00-53),使用星期日作为一周的第一天1(并且通常以一年的第一个星期日作为第1周的第1天).美国大会.

Ite*_*tor 22

这有点像你之前看到的另一个问题.:)

关键问题是:一周的数字指定哪一天?这是一周的第一天吗?最后?这是模棱两可的.我不知道第一周是一年的第一天还是一年的第七天,或者可能是一年的第一个星期日或星期一(这是一个经常的解释).(而且它比这更糟糕:这些通常看起来是0索引,而不是1索引.)因此,需要指定一周中列举的日期.

例如,试试这个:

as.POSIXlt("2008 42 1", format = "%Y %U %u")
Run Code Online (Sandbox Code Playgroud)

%u指标指定一周的日子.

附加说明:请参阅?strptime格式转换的各种选项.重要的是要小心几周的列举,因为这些可以在年底分开,而且日期1不明确:它是根据星期日或星期一,还是从一年的第一天开始指定的?这应该在R代码运行的不同系统上进行指定和测试.我不确定Windows和POSIX系统在其中一些转换中是否会唱出相同的曲调,因此我会再次进行测试和测试.

  • @JoshO'Brien你可能在美国是对的,但在不同的`tz`位置是错误的.在没有特定时区和非常明确的测试行为的情况下处理数周是有风险的. (2认同)

42-*_*42- 5

POSIXlt DateTimesClasses系统中的星期几==零是星期日.不完全符合圣经,也不符合从"1"惯例开始的R索引,但这就是它的本质.第0周是一年中的第一个(部分)周.第一周(但是第零周的一天)从第一个星期日开始.POSIXlt中的所有其他序列类型都以0为起点.看看强制POSIXlt对象的列表元素做什么很有意思.实际更改POSIXlt日期的唯一方法是更改​​$ year,$ mon或$ mday元素.其他似乎是附带现象.

  today <- as.POSIXlt(Sys.Date())
  today  # Tuesday
#[1] "2012-02-21 UTC"
     today$wday <- 0  # attempt to make it Sunday
     today
# [1] "2012-02-21 UTC"   The attempt fails
 today$mday <- 19
 today
#[1] "2012-02-19 UTC"   Success
Run Code Online (Sandbox Code Playgroud)