我使用strtoi
来确定以下函数中的一周中的一周:
to.week <- function(x) strtoi(format(x, "%W"))
大多数日期都可以正常使用:
> to.week(as.Date("2015-01-11"))
[1] 1
但是,当我在2015-02-23
和2015-03-08
之间尝试日期时,我会得到NA
:
> to.week(as.Date("2015-02-25"))
[1] NA
您能否向我解释一下导致问题的原因?
答案 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。