aggregate() does not return POSIXct object correctly (PR#12887)
On Tue, Sep 16, 2008 at 11:22 AM, Peter Dalgaard
<P.Dalgaard at biostat.ku.dk> wrote:
rene.locher at zhaw.ch wrote:
Full_Name: Rene Locher
Version: 2.7.2 Patched (2008-09-12 r46541)
OS: XP
Submission from: (NULL) (160.85.231.40)
dat <- data.frame(event=factor(c("A","A","B")),
time=as.POSIXct(c("2008-01-10","2008-01-01","2008-01-04")))
min(dat$time)
## "2008-01-01 CET"
## as expected
aggregate(dat$time,by=list(event=dat$event),min)
## results in
## event x
## 1 A 1199142000
## 2 B 1199401200
## I expected:
## event x
## 1 A "2008-01-01 CET"
## 2 B "2008-01-04 CET"
This is as documented, possibly annoying, but not a bug. aggregate() is documented to build on tapply() for which the discarding of class is documented on ?tapply. The root cause is unlist():
tapply(dat[["time"]],dat$event,min,simplify=FALSE)
$A [1] "2008-01-01 CET" $B [1] "2008-01-04 CET"
unlist(tapply(dat[["time"]],dat$event,min,simplify=FALSE))
A B 1199142000 1199401200 and a partial rationale is that unlist() wouldn't know what to do if the arguments had different classes. The workaround is, of course, just to stick the class back on.
Another workaround is: https://stat.ethz.ch/pipermail/r-help/2008-September/173139.html