[R] Combining matrices
Daniel Nordlund
djnordlund at verizon.net
Mon Aug 24 19:08:14 CEST 2009
> -----Original Message-----
> From: Marc Schwartz [mailto:marc_schwartz at me.com]
> Sent: Monday, August 24, 2009 9:57 AM
> To: Daniel Nordlund
> Cc: r help
> Subject: Re: [R] Combining matrices
>
>
> On Aug 24, 2009, at 11:46 AM, Marc Schwartz wrote:
>
> >
> > On Aug 24, 2009, at 11:16 AM, Daniel Nordlund wrote:
> >
> >> If I have two matrices like
> >>
> >> x <- matrix(rep(c(1,2,3),3),3)
> >> y <- matrix(rep(c(4,5,6),3),3)
> >>
> >> How can I combine them to get ?
> >>
> >> 1 1 1 4 4 4
> >> 1 1 1 5 5 5
> >> 1 1 1 6 6 6
> >> 2 2 2 4 4 4
> >> 2 2 2 5 5 5
> >> 2 2 2 6 6 6
> >> 3 3 3 4 4 4
> >> 3 3 3 5 5 5
> >> 3 3 3 6 6 6
> >>
> >> The number of rows and the actual numbers above are unimportant,
> >> they are given so as to illustrate how I want to combine the
> >> matrices. I.e., I am looking for a general way to combine the
> >> first row of x with each row of y, then the second row of x with
> >> y, ....
> >>
> >> Thanks,
> >>
> >> Dan
> >
> >
> >
> > nr.x <- nrow(x)
> > nr.y <- nrow(y)
> >
> > > cbind(x[rep(1:nr.x, each = nr.x), ], y[rep(1:nr.y, nr.y), ])
> > [,1] [,2] [,3] [,4] [,5] [,6]
> > [1,] 1 1 1 4 4 4
> > [2,] 1 1 1 5 5 5
> > [3,] 1 1 1 6 6 6
> > [4,] 2 2 2 4 4 4
> > [5,] 2 2 2 5 5 5
> > [6,] 2 2 2 6 6 6
> > [7,] 3 3 3 4 4 4
> > [8,] 3 3 3 5 5 5
> > [9,] 3 3 3 6 6 6
>
>
>
> Actually, correction...that will work in this case, but in
> the general
> case, I believe that it needs to be:
>
> x <- matrix(rep(c(1,2,3),3),3)
> y <- matrix(rep(c(4,5,6,7),3),4)
>
> > x
> [,1] [,2] [,3]
> [1,] 1 1 1
> [2,] 2 2 2
> [3,] 3 3 3
>
> > y
> [,1] [,2] [,3]
> [1,] 4 4 4
> [2,] 5 5 5
> [3,] 6 6 6
> [4,] 7 7 7
>
>
> nr.x <- nrow(x)
> nr.y <- nrow(y)
>
>
> > cbind(x[rep(1:nr.x, each = nr.y), ], y[rep(1:nr.y, nr.x), ])
> [,1] [,2] [,3] [,4] [,5] [,6]
> [1,] 1 1 1 4 4 4
> [2,] 1 1 1 5 5 5
> [3,] 1 1 1 6 6 6
> [4,] 1 1 1 7 7 7
> [5,] 2 2 2 4 4 4
> [6,] 2 2 2 5 5 5
> [7,] 2 2 2 6 6 6
> [8,] 2 2 2 7 7 7
> [9,] 3 3 3 4 4 4
> [10,] 3 3 3 5 5 5
> [11,] 3 3 3 6 6 6
> [12,] 3 3 3 7 7 7
>
>
> We need to replicate each row by the number of rows in the
> other matrix.
>
> HTH,
>
> Marc
>
Thanks to all who responded (including those off-list). I now have options
to apply to solving my programming task.
Thanks,
Dan
More information about the R-help
mailing list