# [R] Comparing rows of matrices with different dimensions

Marc Schwartz (via MN) mschwartz at mn.rr.com
Mon Nov 21 17:41:26 CET 2005

```On Mon, 2005-11-21 at 16:57 +0100, Antje DÃ¶ring wrote:
>
> Hi there,
>
>
>
> I have a question, which I thought is very easy to solve, but somehow
> I can't find a solution. Probably someone could help me quickly?
>
>
>
> Here it is:
>
>
>
> I have two matrices:
>
>
>
> a
>
>      [,1] [,2] [,3]
>
> [1,]    1    4    9
>
> [2,]    2    6   10
>
> [3,]    3    6   11
>
> [4,]    4    8   12
>
>
>
>
>
> b
>
>      [,1] [,2]
>
> [1,]    1    4
>
> [2,]    2    5
>
> [3,]    3    6
>
>
>
> Now I want to find out which rows of b can also be found in a (without
> its last column). So the solution must be something like either "TRUE
> FALSE TRUE" or the rows where their is a match (rows 1 and 3)
>
>
>
> Till now I have tried things like b %in% a[,1:2] or so but that
> doesn't work because I want to compare the WHOLE row of b with the
> whole row of a without column 3.
>
>
>
> Thank you very much for any help.
>
>
>
> Regards, Antje

Here is one possible approach, though not tested beyond this example:

> which(apply(matrix(b %in% a, dim(b)), 1, all))
[1] 1 3

The steps are:

# which elements of b are in a
> b %in% a
[1]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE

# Turn that into a matrix the same shape as b
> matrix(b %in% a, dim(b))
[,1]  [,2]
[1,] TRUE  TRUE
[2,] TRUE FALSE
[3,] TRUE  TRUE

# get T/F for which rows are all TRUE
> apply(matrix(b %in% a, dim(b)), 1, all)
[1]  TRUE FALSE  TRUE

# Now get the indices
> which(apply(matrix(b %in% a, dim(b)), 1, all))
[1] 1 3

HTH,

Marc Schwartz

```