Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert a character string date to date class if day value is missing

Tags:

date

r

I'm trying to convert the following dates to a time class in R. For some reason, I am getting NAs returned when a day value is not included. I would like to be able to handle this character vector as is without having to paste an arbitrary day value if possible. Thanks for your help.

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")
like image 488
Marc in the box Avatar asked May 04 '12 10:05

Marc in the box


People also ask

How do I change a character to a date?

You can use the as. Date( ) function to convert character data to dates. The format is as. Date(x, "format"), where x is the character data and format gives the appropriate format.

How do I convert a string to a date in SQL?

In SQL Server, converting a string to date explicitly can be achieved using CONVERT(). CAST() and PARSE() functions.

Which function is used convert string into date format?

Date() function in R Language is used to convert a string into date format.


1 Answers

Try as.yearmon from the zoo package:

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"
like image 196
A5C1D2H2I1M1N2O1R2T1 Avatar answered Nov 03 '22 17:11

A5C1D2H2I1M1N2O1R2T1