2012-05-04 8 views
7

Estoy tratando de convertir las siguientes fechas a una clase de tiempo en R. Por alguna razón, obtengo NA devuelto cuando no se incluye un valor de día . Me gustaría poder manejar este vector de caracteres como está sin tener que pegar un valor de día arbitrario si es posible. Gracias por su ayuda.Cómo convertir una cadena de caracteres de fecha a clase de fecha si falta el valor de día

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

Respuesta

10

Trate as.yearmon del paquete 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" 
Cuestiones relacionadas