Skip to content

sorting by date

3 messages · Jeff Jorgensen, Brian Ripley, Peter Dalgaard

#
Hello,

I have set up a data.frame and one of the columns contains a date of the 
form (with slashes as separators):

mm/dd/yyyy

I would like to use formulas on other columns in the data.frame organized 
by date, for example:

tapply(var1, sort(date), mean)

However, when I try sort(date) it sorts based on the first two entries in 
the date field:

9/1/2001	9/1/2002	9/1/2003	9/2/2001 ...
5.6		7.5		6.4		7.0 ...

Instead of:

9/1/2001	9/2/2001	9/3/2001	9/4/2001 ...
5.6		6.1		7.2		6.8 ...

I would greatly appreciate any help in sorting chronologically.  Do I need 
to create separate columns for month, day, and year, and then use order() 
and then stipulate the hierarchy for which to sort the output?  Or, is 
there some other more efficient way?

Thanks,

Jeff
#
Convert to POSIXct and sort.

Note that tapply will coerce to a factor, so you need to create a factor 
with the levels sorted as you want them: just sorting date will not help.
Something like

udate <- unique(date)
lev <- udate[sort.list(as.POSIXct(strptime(udate, "%m/%d/%Y")))]
date <- factor(date, levels=lev)
On Mon, 2 Feb 2004, Jeff Jorgensen wrote:

            

  
    
#
Jeff Jorgensen <jcjorgensen at wisc.edu> writes:
I don't think that does what I think you think it does!
You now know why the ISO standard has yyyy-mm-dd ... 

It's a bit awkward, but I think you need something like

pdate <- as.POSIXct(strptime(date,"%m/%d/%Y"))
tapply(var1, pdate, mean)