[R] Duplicate dates in zoo objects

Achim Zeileis Achim.Zeileis at uibk.ac.at
Tue Jun 22 19:24:06 CEST 2010


On Tue, 22 Jun 2010, Joris Meys wrote:

> Try this :
>> x.Date <- as.Date("2003-02-01") + c(1, 3, 7, 7, 14) - 1
>
>> x <- zoo(1:5, x.Date)
>
>> x
> 2003-02-01 2003-02-03 2003-02-07 2003-02-07 2003-02-14
>         1          2          3          4          5
>
>> i <- match(unique(index(x)),rev(index(x)))
>
>> x[i]
> 2003-02-01 2003-02-03 2003-02-07 2003-02-14
>         1          2          4          5

Note that this happens to do the right thing in this particular toy 
example but not more generally. Simply adding a single observation will 
make it fail. The aggregate() solution I posted previously is preferred:

R> x.Date <- as.Date("2003-02-01") + c(1, 3, 7, 7, 14, 15) - 1
R> x <- zoo(1:6, x.Date)
Warning message:
In zoo(1:6, x.Date) :
   some methods for "zoo" objects do not work if the index entries in 
'order.by' are not unique
R> x
2003-02-01 2003-02-03 2003-02-07 2003-02-07 2003-02-14 2003-02-15
          1          2          3          4          5          6
R> aggregate(x, time(x), tail, 1)
2003-02-01 2003-02-03 2003-02-07 2003-02-14 2003-02-15
          1          2          4          5          6
R> i <- match(unique(index(x)),rev(index(x)))
R>  x[i]
2003-02-01 2003-02-03 2003-02-07 2003-02-14 2003-02-15
          1          2          3          5          6

Best,
Z

> Cheers
> Joris
>
>
> On Tue, Jun 22, 2010 at 4:35 PM, Research <risk2009 at ath.forthnet.gr> wrote:
>> Hello,
>>
>> I have a zoo time series read from an excel file which has some dates the
>> same, such as the following example:
>>
>> 02/10/1995     4925.5
>> 30/10/1995     4915.9
>> 23/01/1996     4963.5
>> 23/01/1996     5009.2
>> 04/03/1996     5031.9     # here
>> 04/03/1996     5006.5     # here
>> 03/04/1996     5069.2
>> 03/05/1996     5103.7
>> 31/05/1996     5107.1
>> 01/07/1996     5153.1
>> 02/08/1996     5151.7
>>
>> Is there a simple way to keep the last  price of the ones that have the same
>> dates?
>>
>> 04/03/1996    5031.9
>> 04/03/1996    5006.5
>>
>> i.e., keep only the "04/03/1996    5006.5"  price and discard the previous
>> one... Is there an implicit function that does that or do I need some sort
>> of recursive algorithm?
>>
>> You can try a solution on this example (for convenience):
>>
>> x.Date <- as.Date("2003-02-01") + c(1, 3, 7, 7, 14) - 1
>> x <- zoo(rnorm(5), x.Date)
>>
>> Zoo object  has 2 prices with same dates.
>>
>> Many thanks in advance,
>> Costas
>>
>> ______________________________________________
>> 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.
>>
>
>
>
> -- 
> Joris Meys
> Statistical consultant
>
> Ghent University
> Faculty of Bioscience Engineering
> Department of Applied mathematics, biometrics and process control
>
> tel : +32 9 264 59 87
> Joris.Meys at Ugent.be
> -------------------------------
> Disclaimer : http://helpdesk.ugent.be/e-maildisclaimer.php
>
> ______________________________________________
> 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.
>


More information about the R-help mailing list