2012-05-04 70 views
7

Tôi đang cố chuyển đổi các ngày sau thành một lớp thời gian bằng R. Vì lý do nào đó, tôi nhận được NA trả về khi giá trị ngày không được bao gồm . Tôi muốn có thể xử lý vectơ ký tự này như là không cần phải dán một giá trị ngày tùy ý nếu có thể. Cảm ơn sự giúp đỡ của bạn.Cách chuyển đổi ngày chuỗi ký tự thành lớp ngày nếu giá trị ngày bị thiếu

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") 

Trả lời

10

Hãy thử as.yearmon từ gói zoo:

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" 
Các vấn đề liên quan