Re: [R] diff, POSIXct, POSIXlt, POSIXt

From: Patrick Giraudoux <patrick.giraudoux_at_univ-fcomte.fr>
Date: Sun 23 Jul 2006 - 22:15:05 EST

> Try converting to POSIXct:
That's what I did finally (see the previous e-mail).

dts<-c("15/4/2003","15/7/2003","15/10/2003","15/04/2004","15/07/2004","15/10/2004","15/4/2005","15/07/2005","15/10/2005","15/4/2006")

dts <- as.POSIXct(strptime(dts, "%d/%m/%Y")) diff(dts)

Time differences of 91, 92, 183, 91, 92, 182, 91, 92, 182 days

> What is the problem you are trying to solve?
Actually, I don't understand why using diff() and POSIXct provides the expected result and not using POSIXlt. Both POSIXct and POSIXlt are of class POSIXt. The doc of diff() stresses that <'diff' is a generic function with a default method and ones for classes '"ts"', '"POSIXt"' and '"Date"'>. It does not mention differences between POSIXct and POSIXlt.

Moreover, using diff() with POSIXlt has provided (wrong) numbers... and not an error. This may be difficult to detect sometimes along programme lines. Must one keep in mind that diff() is reliably applicable only on POSIXct? In this case, should not it bve mentionned in the documentation?

All the best,

Patrick

jim holtman a écrit :
> Try converting to POSIXct:
>
> > str(dts)
> 'POSIXlt', format: chr [1:10] "2003-04-15" "2003-07-15" "2003-10-15"
> "2004-04-15" "2004-07-15" "2004-10-15" "2005-04-15" ...
> > dts
> [1] "2003-04-15" "2003-07-15" "2003-10-15" "2004-04-15" "2004-07-15"
> "2004-10-15" "2005-04-15" "2005-07-15"
> [9] "2005-10-15" "2006-04-15"
> > dts <- as.POSIXct(dts)
> > dts
> [1] "2003-04-15 EDT" "2003-07-15 EDT" "2003-10-15 EDT" "2004-04-15
> EDT" "2004-07-15 EDT" "2004-10-15 EDT"
> [7] "2005-04-15 EDT" "2005-07-15 EDT" "2005-10-15 EDT" "2006-04-15 EDT"
> > diff(dts)
> Time differences of 91, 92, 183, 91, 92, 182, 91, 92, 182 days
> >
>
>
>
> On 7/23/06, *Patrick Giraudoux* <patrick.giraudoux@univ-fcomte.fr
> <mailto:patrick.giraudoux@univ-fcomte.fr>> wrote:
>
> Dear Listers,
>
> I have encountered a strange problem using diff() and POSIXt:
>
> dts<-c("15/4/2003","15/7/2003","15/10/2003","15/04/2004","15/07/2004","15/10/2004","15/4/2005","15/07/2005","15/10/2005","15/4/2006")
>
> dts <- strptime(dts, "%d/%m/%Y")
> class(dts)
>
> [1] "POSIXt" "POSIXlt"
>
> diff(dts)
>
> Time differences of 7862400, 7948800, 15811200, 7862400, 7948800,
> 15724800, 7862400, 7948800, 0 secs
>
> In this case the result is not the one expected: expressed in seconds
> and not in days, and the difference between the two last dates is
> not 0.
>
> Now, if one use a vector of 9 dates only (whatever the date removed),
> things come well:
>
> diff(dts[-1])
>
> Time differences of 92, 183, 91, 92, 182, 91, 92, 182 days
>
> Also if one contrains dts to POSIXct
>
> dts<-c("15/4/2003","15/7/2003","15/10/2003","15/04/2004","15/07/2004","15/10/2004","15/4/2005","15/07/2005","15/10/2005","15/4/2006")
>
> dts <- as.POSIXct(strptime(dts, "%d/%m/%Y"))
> diff(dts)
>
> Time differences of 91, 92, 183, 91, 92, 182, 91, 92, 182 days
>
> Any rational in that?
>
> Patrick
>
> ______________________________________________
> R-help@stat.math.ethz.ch <mailto:R-help@stat.math.ethz.ch> 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 you are trying to solve?

        [[alternative HTML version deleted]]



R-help@stat.math.ethz.ch 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. Received on Sun Jul 23 22:22:50 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Mon 24 Jul 2006 - 02:17:38 EST.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.