[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