rene.locher at zhaw.ch
2008-Sep-16 14:05 UTC
[Rd] aggregate() does not return POSIXct object correctly (PR#12887)
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" ## my system: sessionInfo() ## R version 2.7.2 Patched (2008-09-12 r46541) ## i386-pc-mingw32 ## ## locale: ## LC_COLLATE=German_Switzerland.1252;LC_CTYPE=German_Switzerland.1252;LC_MONETARY=German_Switzerland.1252;LC_NUMERIC=C;LC_TIME=German_Switzerland.1252 ## ## attached base packages: ## [1] stats graphics grDevices utils datasets methods base Kind regards Rene Locher E-Mail: rene.locher at zhaw.ch Institute for Data Analysis and Process Design Tel: +41 58 934 7810 Zurich University of Applied Sciences Fax: +41 58 935 7810 Rosenstrasse 3 Postfach CH-8401 Winterthur http://www.idp.zhaw.ch
Peter Dalgaard
2008-Sep-16 15:22 UTC
[Rd] 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