问题 R Strptime年份和月份没有分隔符返回NA


我可能做了一些愚蠢而没有看到的东西,但是:

> strptime("201101","%Y%m")
[1] NA

从帮助strptime:

%Y世纪
  %m月份为十进制数(01-12)


2592
2017-07-29 17:27


起源

您发现了文档错误 strptime 必须提供所有年 - 月 - 日,这在任何地方都没有说明: “对于strptime,输入字符串不需要完全指定日期:假设未指定的秒,分钟或小时为零,未指定的年,月或日是当前的。 - smci


答案:


只需粘贴您忽略的日期字段(例如“01”):

R> shortdate <- "201101"
R> as.Date(paste(shortdate, "01", sep=""), "%Y%m%d")
[1] "2011-01-01"
R> 

我更喜欢 as.Date() 对于日期和 strptime() 对于 POSIXct 对象,即日期和时间。

然后,您可以转换已解析的 Date 对象变成了 POSIXlt 检索年月的对象:

R> mydt <- as.Date(paste(shortdate, "01", sep=""), "%Y%m%d")
R> myp <- as.POSIXlt(mydt)
R> c(myp$year, myp$mon)
[1] 111   0
R> 

这是标准的POSIX行为,年份为“年 - 1900”,月份为零索引。


12
2017-07-29 17:31



所以在R你不能说没有天数,你必须注入01的假设。奇怪。 - userJT