[R] read "4-jan-02" as date

Gabor Grothendieck ggrothendieck at myway.com
Mon Oct 11 18:21:46 CEST 2004


> 
: From:   bogdan romocea <br44114 at yahoo.com>
:  
: Dear R users,
: 
: I have a column with dates (character) in a data frame:
: 12-Jan-01 11-Jan-01 10-Jan-01 9-Jan-01 8-Jan-01 5-Jan-01
: and I need to convert them to (Julian) dates so that I can
: sort the whole data frame by date. I thought it would be
: very simple, but after checking the documentation and the
: list I still don't have something that works.
: 
: 1. as.Date returns the error below. What am I doing wrong?
: As far as I can see the character strings are in standard
: format.
: d$Date <- as.Date(d$Date, format="%d-%b-%y")
: Error in fromchar(x) : character string is not in a
: standard unambiguous format

On Windows I ran it and it seems to work:
R> x <- c("12-Jan-01", "11-Jan-01", "10-Jan-01", "9-Jan-01", "8-Jan-01", "5-
Jan-01")
R> y <- as.Date(x, format="%d-%b-%y")
R> y
[1] "2001-01-12" "2001-01-11" "2001-01-10" "2001-01-09" "2001-01-08"
[6] "2001-01-05"
R> R.version.string
[1] "R version 2.0.0, 2004-10-04"

Perhaps you have read in your data as a factor (which is the default
for read.table reading in data frames)?  If that is the case, try using 
as.is = TRUE as an argument to read.table or try this:

	y <- as.Date(as.character(x), "%d-%b-%y") 

: 2. as.date {Survival} produces this error,
: d$Date <- as.date(d$Date, order = "dmy")
: Error in as.date(d$Date, order = "dmy") : Cannot coerce to
: date format

as.date requires a character argument.  Using x and y from above,
either of these should work:

	as.date(as.character(x)) # or just as.date(x) if x is already character
	as.date(as.character(y), "ymd")

: 
: 3. Assuming all else fails, is there a text function
: similar to SCAN in SAS? Given a string like "9-Jan-01" and
: "-" as separator, I'd like a function that can read the
: first, second and third values (9, Jan, 01), so that I can
: get Julian dates with mdy.date {survival}.

	x1 <- sapply(strsplit(as.character(x), split = "-"), 
		function(x) paste(x[2],x[1],x[3],sep="/"))
	as.date(x1)

	# convert from dd-mmm-yy to mmm/dd/yy
	x2 <- sub("(..)-(...)-(..)", "\\2/\\1/\\3", as.character(x))
	as.date(x2)

: 
: Thanks in advance,
: b.
: 

Check out the article in R News Help Desk in issue 4/1 to learn more
about dates.  (Click on Newsletter on left side of www.r-project.org.)




More information about the R-help mailing list