[R] What determines the unit of POSIXct differences?

Heinz Tuechler tuechler at gmx.at
Fri Sep 11 15:21:42 CEST 2009


Jim - Thank you very much for this explanation and the hint to use difftime.

Heinz

At 15:09 11.09.2009, jim holtman wrote:
>'-' calls 'difftime' which, if you don't specify the units, makes the
>following assumptions in the code:
>
> > difftime
>function (time1, time2, tz = "", units = c("auto", "secs", "mins",
>     "hours", "days", "weeks"))
>{
>     time1 <- as.POSIXct(time1, tz = tz)
>     time2 <- as.POSIXct(time2, tz = tz)
>     z <- unclass(time1) - unclass(time2)
>     units <- match.arg(units)
>     if (units == "auto") {
>         if (all(is.na(z)))
>             units <- "secs"
>         else {
>             zz <- min(abs(z), na.rm = TRUE)
>             if (is.na(zz) || zz < 60)
>                 units <- "secs"
>             else if (zz < 3600)
>                 units <- "mins"
>             else if (zz < 86400)
>                 units <- "hours"
>             else units <- "days"
>         }
>     }
>     switch(units, secs = structure(z, units = "secs", class = "difftime"),
>         mins = structure(z/60, units = "mins", class = "difftime"),
>         hours = structure(z/3600, units = "hours", class = "difftime"),
>         days = structure(z/86400, units = "days", class = "difftime"),
>         weeks = structure(z/(7 * 86400), units = "weeks", class = 
> "difftime"))
>}
>
>
>You can use difftime explicitly so you can control the units.
>
> > c(as.POSIXct('2009-09-01'), as.POSIXct('2009-10-11')) 
> -   as.POSIXct('2009-08-31')
>Time differences in days
>[1]  1 41
> > difftime(c(as.POSIXct('2009-09-01'), as.POSIXct('2009-10-11')), 
> as.POSIXct('2009-08-31'), units='sec')
>Time differences in secs
>[1]   86400 3542400
> >
> >
>
>
>On Fri, Sep 11, 2009 at 7:50 AM, Heinz Tuechler <tuechler at gmx.at> wrote:
> > Dear All,
> >
> > what determines if a difference between POSIXct objects gets expressed in
> > days or seconds?
> > In the following example, it's sometimes seconds, sometimes days.
> >
> > as.POSIXct('2009-09-01') - as.POSIXct(NA)
> > Time difference of NA secs
> >
> > c(as.POSIXct('2009-09-01'), as.POSIXct(NA)) -
> >  c(as.POSIXct('2009-09-01'), as.POSIXct('2009-08-31'))
> > Time differences in secs
> > [1]  0 NA
> >
> > c(as.POSIXct('2009-09-01'), as.POSIXct(NA)) -
> >  as.POSIXct('2009-08-31')
> > Time differences in days
> > [1]  1 NA
> >
> > Thanks,
> > Heinz
> >
> > ______________________________________________
> > R-help at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide 
> http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
> >
>
>
>
>--
>Jim Holtman
>Cincinnati, OH
>+1 513 646 9390
>
>What is the problem that you are trying to solve?




More information about the R-help mailing list