[R] Combining matrices
Marc Schwartz
marc_schwartz at me.com
Mon Aug 24 18:57:11 CEST 2009
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
More information about the R-help
mailing list