[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




More information about the R-help mailing list