Also, fyi, MATCH.times has been added to the development version of
zoo so in the future these workarounds will not be necessary.  That
is, in the next version of zoo one can simply write merge(zoo.ts.pot,
zoo.ts) here.

On Thu, Mar 18, 2010 at 6:37 PM, Gabor Grothendieck
<ggrothendi...@gmail.com> wrote:
> Here is a shorter and improved version:
>
> # 2
> Rnd <- function(x) {
>       time(x) <- trunc(time(x), "sec")
>       x
> }
> zoo.ts.cor.2 <- merge.zoo(Rnd(zoo.ts.pot), Rnd(zoo.ts))
>
> # 3
> MATCH.times <- function(x, table, nomatch = NA, ...) match(trunc(x,
> "sec"), trunc(table, "sec"), nomatch = nomatch, ...)
> zoo.ts.cor.3 <- merge.zoo(zoo.ts.pot, zoo.ts)
>
>
>
>
> On Thu, Mar 18, 2010 at 3:05 PM, Gabor Grothendieck
> <ggrothendi...@gmail.com> wrote:
>> It occurs because the two series have times that are slightly
>> different. For example, it may appear that the times at positions 909
>> and 910 are the same but in fact they are different:
>>
>>> tt <- time(zoo.ts.cor)[909:910]; tt
>> [1] (03/09/09 12:30:00) (03/09/09 12:30:00)
>>> diff(as.numeric(tt))
>> [1] 1.818989e-12
>>
>> Here are two ways to deal with this:
>>
>> ############
>> # 1. Use a different date/time class.
>> ############
>>
>> ############
>> # 2. Round off inputs to merge:
>> ############
>>
>> rnd <- function(x) round(24 * 3600 * x + 0.5) / (24 * 3600)
>> Rnd <- function(x) {
>>        time(x) <- chron(rnd(as.numeric(time(x))))
>>        x
>> }
>>
>> zoo.ts.cor.rnd <- merge.zoo(Rnd(zoo.ts.pot), Rnd(zoo.ts))
>>
>>
>> ############
>> # 3. zoo provides a facility for the user to change how matching is done.
>> #    Define a MATCH method for the class of interest.  In this case
>> its done like this:
>> ############
>>
>> # rnd function is from above
>> MATCH.chron <- function(x, table, nomatch = NA, ...) {
>>        match(rnd(as.numeric(x)), rnd(as.numeric(table)), nomatch = nomatch, 
>> ...)
>> }
>>
>> zoo.ts.cor.ok <- merge.zoo(zoo.ts.pot, zoo.ts)
>>
>>
>> On Thu, Mar 18, 2010 at 2:00 PM, Jan Schwanbeck <jschw...@gmail.com> wrote:
>>> Dear all,
>>>
>>> merge.zoo produces duplicated time indexes in the example stated below. Can
>>> anybody explain, what I am doing wrong?
>>>
>>> Many thanks!
>>>
>>> Jan
>>>
>>> (R 2.10.0, WindowsXP)
>>>
>>> require(chron)
>>> require(zoo)
>>>
>>> # create time series (zoo.ts) with no data from 31Aug2009 14:50 to 3Sep2009
>>> 7:25
>>> t.st <- chron("31/08/2009","09:20:00",format=c("d/m/Y","h:m:s"))
>>> t.nd <- chron("31/08/2009","14:50:00",format=c("d/m/Y","h:m:s"))
>>> t.indexA<-seq(t.st,t.nd,by=1/(24*12))
>>>
>>> t.st <- chron("03/09/2009","07:25:00",format=c("d/m/Y","h:m:s"))
>>> t.nd <- chron("03/09/2009","23:55:00",format=c("d/m/Y","h:m:s"))
>>> t.indexB<-seq(t.st,t.nd,by=1/(24*12))
>>>
>>> t.index<-c(t.indexA,t.indexB)
>>>
>>> zoo.ts <- zoo(0,t.index)
>>>
>>> # create reference time series (zoo.ts.pot) without missing time steps
>>> t.st <- head(time(zoo.ts),1)
>>> t.nd <- tail(time(zoo.ts),1)
>>> t.index<-seq(t.st,t.nd,by=1/(24*12))
>>> zoo.ts.pot <- zoo(NA,t.index)
>>>
>>> # merge erroneous time series with reference time series
>>> zoo.ts.cor <- merge.zoo(zoo.ts.pot,zoo.ts)
>>>
>>> ####################################
>>> #################### Do not run: Results:
>>>                              zoo.ts.pot zoo.ts
>>> (31/08/09 09:20:00)         NA      0
>>> (31/08/09 09:25:00)         NA      0
>>> (31/08/09 09:30:00)         NA      0
>>> ...
>>> (31/08/09 14:50:00)         NA      0
>>> (31/08/09 14:55:00)         NA     NA
>>> (31/08/09 15:00:00)         NA     NA
>>> (31/08/09 15:05:00)         NA     NA
>>> ...
>>> (03/09/09 07:15:00)         NA     NA
>>> (03/09/09 07:20:00)         NA     NA
>>> (03/09/09 07:25:00)         NA      0
>>> (03/09/09 07:30:00)         NA      0
>>> (03/09/09 07:35:00)         NA      0
>>> (03/09/09 07:40:00)         NA      0
>>> (03/09/09 07:45:00)         NA      0
>>> (03/09/09 07:50:00)         NA      0
>>> (03/09/09 07:55:00)         NA      0
>>> (03/09/09 08:00:00)         NA      0
>>> # everything o.k. up to here
>>> (03/09/09 08:00:00)         NA     NA
>>> # from here: every tenth time stamp is duplicated. Why?
>>> ...
>>> (03/09/09 08:45:00)         NA      0
>>> (03/09/09 08:45:00)         NA     NA
>>> ..
>>> (03/09/09 09:30:00)         NA      0
>>> (03/09/09 09:30:00)         NA     NA
>>> ...
>>>
>>> ______________________________________________
>>> R-help@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.
>>>
>>
>

______________________________________________
R-help@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.

Reply via email to