aggregate() does not return POSIXct object correctly (PR#12887)
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.
O__ ---- Peter Dalgaard ?ster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907