Hi, I have a list L of about 2,600 xts's. Each xts has a single numeric column. About 90% of the xts's have approximately 500 rows, and the rest have fewer than 500 rows. I create a single xts using the command myXts <- Reduce( merge.xts, L ) By default, merge.xts() does an outer join (which is what I want). The command takes about 80 seconds to complete. I have plenty of RAM on my computer. Are there faster ways to accomplish this task? Thanks, Eric [[alternative HTML version deleted]]
Quoting Eric Berger <ericjberger at gmail.com>:> Hi, > I have a list L of about 2,600 xts's. > Each xts has a single numeric column. About 90% of the xts's have > approximately 500 rows, and the rest have fewer than 500 rows. > I create a single xts using the command > > myXts <- Reduce( merge.xts, L ) > > By default, merge.xts() does an outer join (which is what I want). > > The command takes about 80 seconds to complete. > I have plenty of RAM on my computer. > > Are there faster ways to accomplish this task? > > Thanks, > Eric >Since you already know the number of series and all possible timestamps, you could preallocate a matrix (number of timestamps times number of series). You could use the fastmatch package to match the timestamps against the rows. This what 'pricetable' in the PMwR package does. Calling library("PMwR") do.call(pricetable, L) should give you matrix of the merged series, with an attribute 'timestamp', from which you could create an xts object again. I am not sure if it is the fastest way, but it's probably faster than calling merge repeatedly. kind regards Enrico (the maintainer of PMwR) -- Enrico Schumann Lucerne, Switzerland http://enricoschumann.net
You don't need Reduce as xts already supports mutliway merges. This perfroms one multiway merge rather than k-1 two way merges. do.call("merge", L) On Thu, Jan 2, 2020 at 6:13 AM Eric Berger <ericjberger at gmail.com> wrote:> > Hi, > I have a list L of about 2,600 xts's. > Each xts has a single numeric column. About 90% of the xts's have > approximately 500 rows, and the rest have fewer than 500 rows. > I create a single xts using the command > > myXts <- Reduce( merge.xts, L ) > > By default, merge.xts() does an outer join (which is what I want). > > The command takes about 80 seconds to complete. > I have plenty of RAM on my computer. > > Are there faster ways to accomplish this task? > > Thanks, > Eric > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.-- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com
Hi Gabor, This is great, thanks. It brought the time down to about 4 seconds. The command do.call("merge.xts",L) also works in this case. Suppose that instead of the default "outer" join I wanted to use, say, a "left" join. Is that possible? I tried a few ways of adding the join="left" parameter to the do.call() command but I could not get the syntax to work (assuming it's even possible). Thanks, Eric On Thu, Jan 2, 2020 at 3:23 PM Gabor Grothendieck <ggrothendieck at gmail.com> wrote:> You don't need Reduce as xts already supports mutliway merges. This > perfroms one > multiway merge rather than k-1 two way merges. > > do.call("merge", L) > > On Thu, Jan 2, 2020 at 6:13 AM Eric Berger <ericjberger at gmail.com> wrote: > > > > Hi, > > I have a list L of about 2,600 xts's. > > Each xts has a single numeric column. About 90% of the xts's have > > approximately 500 rows, and the rest have fewer than 500 rows. > > I create a single xts using the command > > > > myXts <- Reduce( merge.xts, L ) > > > > By default, merge.xts() does an outer join (which is what I want). > > > > The command takes about 80 seconds to complete. > > I have plenty of RAM on my computer. > > > > Are there faster ways to accomplish this task? > > > > Thanks, > > Eric > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > 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. > > > > -- > Statistics & Software Consulting > GKX Group, GKX Associates Inc. > tel: 1-877-GKX-GROUP > email: ggrothendieck at gmail.com >[[alternative HTML version deleted]]