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.pi...@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.weyla...@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]] ______________________________________________ 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.