This seems to be the easiest way to handle the problem:

> a = xts(coredata(a), time(a))
> b = xts(coredata(b), time(b))
> merge(a,b)


           ZWD.UGX SCHB.Close
2010-03-31      NA      28.02
2010-04-01  7.6343         NA
2010-04-02  7.6343         NA
2010-04-03  7.5458         NA
2010-04-04  7.4532      28.30
2010-04-05  7.4040      28.38
2010-04-06  7.3317      28.21
2010-04-07      NA      28.31
2010-04-08      NA      28.47

I can't be sure where the problem was coming from, but if you look
closely into the mumbo jumbo of the dput() code you'll see that the
time indices don't actually match anywhere as POSIXct/POSIXt objects.
Even though they map to the same day, something or other is keeping
them as internally different and it's probably inherited from the data
sources -- one set maps to times captured at 2300 EDT on my machine
and the other to 0800 EDT. If you want, it might be interesting to
track down the difference, but the fix I gave above, which basically
pulls the time data out through the xts class and only keeps the date
in creating a new xts that's exactly the same should handle it.

In short, it's all black magic derived from R's various time/date
mechanisms. If you don't


really want to see whats under the hood, this will also work in this case.


> a = as.xts(a)
> b = as.xts(b)
> merge(a, b)

But this can lead to some strange code if you don't take a moment to think
about it

> is.xts(a)
TRUE

> identical(a, as.xts(a))
FALSE

Hope this helps and thanks for the fun problem!

Michael Weylandt




On Fri, Aug 26, 2011 at 8:08 AM, Petr PIKAL <petr.pikal@precheza.cz> wrote:

> I was rather too quick
>
> It has probably something to do with versions of zoo and xts
>
> after updating to zoo 1.7.4 and xts 0.8.2 I got with your examples
>
> > merge(a,b)
>           ZWD.UGX SCHB.Close
> 2010-04-01      NA      28.02
> 2010-04-01  7.6343         NA
> 2010-04-02  7.6343         NA
> 2010-04-03  7.5458         NA
> 2010-04-04  7.4532         NA
> 2010-04-05      NA      28.30
> 2010-04-05  7.4040         NA
> 2010-04-06      NA      28.38
> 2010-04-06  7.3317         NA
> 2010-04-07      NA      28.21
> 2010-04-08      NA      28.31
> 2010-04-09      NA      28.47
>
> but when I did
>
> > a<-as.zoo(a)
> > b<-as.zoo(b)
>
> I got
>
> > merge(a,b)
>           ZWD.UGX SCHB.Close
> 2010-04-01  7.6343      28.02
> 2010-04-02  7.6343         NA
> 2010-04-03  7.5458         NA
> 2010-04-04  7.4532         NA
> 2010-04-05  7.4040      28.30
> 2010-04-06  7.3317      28.38
> 2010-04-07      NA      28.21
> 2010-04-08      NA      28.31
> 2010-04-09      NA      28.47
>
> which is probably what you want.
>
> Regards
> Petr
>
> >
>
> > Hi
> >
> > >
> > > On 26 August 2011 03:37, R. Michael Weylandt
> <michael.weylandt@gmail.com> wrote:
> > > > If you could, dput() them so we can see everything about them. You
> also
> > > > might see if merge() gives you more expected behavior....
> > >
> > > Ok...
> > > > dput(a)
> > > structure(c(7.6343, 7.6343, 7.5458, 7.4532, 7.404, 7.3317), class =
> c("xts",
> > > "zoo"), .indexCLASS = "Date", .indexTZ = "", index =
> structure(c(1270105200,
> > > 1270191600, 1270278000, 1270364400, 1270450800, 1270537200), tzone =
> > > "", tclass = "Date"), .Dim = c(6L,
> > > 1L), .Dimnames = list(NULL, "ZWD.UGX"))
> > > > dput(b)
> > > structure(c(28.02, 28.3, 28.38, 28.21, 28.31, 28.47), .indexCLASS =
> > > "Date", .indexTZ = "", src = "yahoo", updated =
> > > structure(1314356091.21457, class = c("POSIXct",
> > > "POSIXt")), class = c("xts", "zoo"), index = structure(c(1270072800,
> > > 1270418400, 1270504800, 1270591200, 1270677600, 1270764000), tzone =
> > > "", tclass = "Date"), .Dim = c(6L,
> > > 1L), .Dimnames = list(NULL, "SCHB.Close"))
> > > > merge(a,b)
> > > > merge(a,b)
> > >            ZWD.UGX SCHB.Close
> > > 2010-04-01      NA      28.02
> > > 2010-04-01  7.6343         NA
> > > 2010-04-02  7.6343         NA
> > > 2010-04-03  7.5458         NA
> > > 2010-04-04  7.4532         NA
> > > 2010-04-05      NA      28.30
> > > 2010-04-05  7.4040         NA
> > > 2010-04-06      NA      28.38
> > > 2010-04-06  7.3317         NA
> > > 2010-04-07      NA      28.21
> > > 2010-04-08      NA      28.31
> > > 2010-04-09      NA      28.47
> > > > q()
>
> > I get slightly different result
> >
> > > xx<-(merge(a,b))
> > > xx
> >            ZWD.UGX SCHB.Close
> > 1270072800      NA      28.02
> > 1270105200  7.6343         NA
> > 1270191600  7.6343         NA
> > 1270278000  7.5458         NA
> > 1270364400  7.4532         NA
> > 1270418400      NA      28.30
> > 1270450800  7.4040         NA
> > 1270504800      NA      28.38
> > 1270537200  7.3317         NA
> > 1270591200      NA      28.21
> > 1270677600      NA      28.31
> > 1270764000      NA      28.47
> >
> > but from what you want it seems to me that aggregate could be suitable
> second step.
> >
> > something like
> >
> > aggregate(xx, list(those dates you have but I don't), mean, na.rm=T)
> >
> > could do what you want.
> >
> > Regards
> > Petr
> >
> > >
> > > So, no, merge doesn't work...
> > > --
> > > Sent from my mobile device
> > > Envoyait de mon telephone mobil
> > >
> > > ______________________________________________
> > > 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.
>

	[[alternative HTML version deleted]]

