【发布时间】:2010-12-22 03:24:18
【问题描述】:
我在 R 中得到了一个我不理解的结果。
如果我使用 strptime 和格式为 %Y-%m 的年和日(如“2009-12”),我会得到 NA 结果。但是,如果我添加一天,例如“2009-12-01”,并相应地更改格式字符串,我会得到一个结果。示例:
> strptime("2009-12",format="%Y-%m")
[1] NA
> strptime("2009-12-03",format="%Y-%m-%d")
[1] "2009-12-03"
这是为什么呢?
更新:我很好奇的是为什么 strptime 不解析一年和一个月,而它不解析的原因似乎很奇怪,因为它 确实只解析一年,或者一年又一天:
> strptime("2009",format="%Y") # year only. Works. Uses current month and day as defaults.
[1] "2009-12-02"
> strptime("2009-03",format="%Y-%d") # year and day. Works. Uses current month as default.
[1] "2009-12-03"
> strptime("2009-03",format="%Y-%m") # year and month. Doesn't work. ?
[1] NA
更新以解释为什么这不是重复的
可能的重复是在这个问题几年后被问到的,它与R 中的一个单独的 API 相关:asDate 函数。这个问题是关于 strptime 函数的一个怪癖,截至 R 3.1.3 仍然适用。
【问题讨论】:
-
因为日期有天数?你期望它输出什么?
-
你希望那是一年中的一天吗?如果是这样,请尝试“%j”。
-
我期待它使用当前日期作为默认值,如果你执行 strptime("2009", format="%Y") 会这样做。这导致“2009-12-01”。
-
在这种情况下为什么不使用 Sys.Date() 呢? “2009-12”本身不是一个有效的日期。