2011-07-29 66 views
11

我可能做一些愚蠢的事,并没有看到它,但:[R Strptime年和月有没有分隔符返回NA

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

从帮助strptime:

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

+0

您发现* * strptime * *的文档错误必须全部提供,并且从未在任何地方声明:*“对于strptime,输入字符串不需要完全指定日期:假定未指定秒,分钟或小时为零,未指定的年份,月份或日期为当前日期。“* – smci

回答

12

只需粘贴每天领域(比如 “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> 

这是年“年度 - 1900”标准POSIX行为和个月零索引。

+0

所以在R中,您不能说没有日期数字,您必须注入假设01.奇怪。 – userJT