2012-05-04 11 views
7

Sto provando a convertire le seguenti date in una classe di tempo in R. Per qualche motivo, sto ricevendo NA restituite quando un valore di giorno non è incluso . Mi piacerebbe essere in grado di gestire questo vettore di caratteri così com'è, senza dover incollare un valore di giorno arbitrario, se possibile. Grazie per il vostro aiuto.Come convertire una stringa di caratteri data in data classe se manca il valore di giorno

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

risposta

10

Prova as.yearmon dal pacchetto 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" 
Problemi correlati