R - strtoi奇怪的行为,以获得一年中的一周

时间:2015-05-06 15:25:25

标签: r date format

我使用strtoi来确定以下函数中的一周中的一周:

to.week <- function(x) strtoi(format(x, "%W"))

大多数日期都可以正常使用:

> to.week(as.Date("2015-01-11"))
[1] 1

但是,当我在2015-02-232015-03-08之间尝试日期时,我会得到NA

> to.week(as.Date("2015-02-25"))
[1] NA

您能否向我解释一下导致问题的原因?

2 个答案:

答案 0 :(得分:6)

这是一个有效的实现:

to.week <- function(x) as.integer(format(x, "%W"))

strtoi失败的原因是,默认情况下,当它们以"0"开头时,它会尝试将数字解释为八进制数。由于"%W"返回"08",并且八进制中不存在8,因此您获得NA。来自?strtoi

  

使用C函数strtol根据给定的基础将字符串转换为整数,或者根据C规则选择合适的基数。

     

...

     

对于十进制字符串as.integer同样有用。

另外,您可以使用:

week(as.Date("2015-02-25"))

虽然您可能需要将结果偏移1以符合您的期望。

答案 1 :(得分:4)

你可以稍微修改你的代码

to.week <- function(x) strtoi(format(x, "%W"), 10)

并使用基数10。