[R] Duplicate dates in zoo objects
Joris Meys
jorismeys at gmail.com
Tue Jun 22 19:32:59 CEST 2010
Oops, I was too fast. I meant :
i <- length(x)- match(unique(index(x)),rev(index(x)))+1
(one has to reverse the indices again)
But in any case, the aggregate-way is indeed far cleaner. Thx for
pointing that out.
Cheers
Joris
On Tue, Jun 22, 2010 at 7:24 PM, Achim Zeileis <Achim.Zeileis at uibk.ac.at> wrote:
> 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.
>
--
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
More information about the R-help
mailing list