2012-05-04 22 views
7

我试图将以下日期转换为R中的时间类。由于某种原因,当日期值未包含时,我得到了NAs返回值。我希望能够按原样处理此字符矢量,而不必在可能的情况下粘贴任意日期值。 感谢您的帮助。如何将字符串日期转换为日期类如果日期值不存在

TS <- c("2004-12", "2005-01", "2005-02", "2005-03", "2005-04", "2005-05", 
"2005-06", "2005-07", "2005-08", "2005-09", "2005-10", "2005-11", 
"2005-12", "2006-01", "2006-02", "2006-03", "2006-04", "2006-05", 
"2006-06", "2006-07", "2006-08") 
TSd <- paste(TS, "01", sep="-") 

#doesn't work 
as.Date(TS, format="%Y-%m") 
as.POSIXlt(TS, format="%Y-%m") 

#works 
as.Date(TSd, format="%Y-%m-%d") 
as.POSIXlt(TSd, format="%Y-%m-%d") 

回答

10

zoo包尝试as.yearmon

library(zoo) 
# as.yearmon(TS, "%Y-%m") 
as.yearmon(TS) 
# [1] "Dec 2004" "Jan 2005" "Feb 2005" "Mar 2005" "Apr 2005" "May 2005" "Jun 2005" 
# [8] "Jul 2005" "Aug 2005" "Sep 2005" "Oct 2005" "Nov 2005" "Dec 2005" "Jan 2006" 
# [15] "Feb 2006" "Mar 2006" "Apr 2006" "May 2006" "Jun 2006" "Jul 2006" "Aug 2006" 

as.Date(as.yearmon(TS)) 
## [1] "2004-12-01" "2005-01-01" "2005-02-01" "2005-03-01" "2005-04-01" 
## [6] "2005-05-01" "2005-06-01" "2005-07-01" "2005-08-01" "2005-09-01" 
## [11] "2005-10-01" "2005-11-01" "2005-12-01" "2006-01-01" "2006-02-01" 
## [16] "2006-03-01" "2006-04-01" "2006-05-01" "2006-06-01" "2006-07-01" 
## [21] "2006-08-01" 

format(as.Date(as.yearmon(TS)), "%Y-%m") 
## [1] "2004-12" "2005-01" "2005-02" "2005-03" "2005-04" "2005-05" "2005-06" 
## [8] "2005-07" "2005-08" "2005-09" "2005-10" "2005-11" "2005-12" "2006-01" 
## [15] "2006-02" "2006-03" "2006-04" "2006-05" "2006-06" "2006-07" "2006-08" 
相关问题