[R] matching rows in matrices
Marc Schwartz
marc_schwartz at me.com
Thu Jul 2 16:20:09 CEST 2009
On Jul 2, 2009, at 7:27 AM, dreamworx wrote:
>
> I have a matrix such as this,
>
> [,1] [,2] [,3]
> [1,] 1 1 2
> [2,] 2 5 5
>
> and a larger matrix such as this,
>
> a b
> [1,] 1 5
> [2,] 2 5
> [3,] 4 9
> [4,] 5 8
> [5,] 7 8
> [6,] 7 10
> [7,] 9 10
>
> what I want to do is check the number of times the columns in the
> first
> matrix appear as rows in the second matrix. So for instance in this
> example
> 1,5 and 2,5 appear in both so I'd want R to return the number 2. Is
> there a
> function to do this?
My first approach would be to use merge(), which performs a relational
join. So, given mat1:
# Note the rownames here, to match the colnames in mat2
> mat1
[,1] [,2]
a 1 2
b 5 5
and mat2:
> mat2
a b
[1,] 1 5
[2,] 2 5
[3,] 4 9
[4,] 5 8
[5,] 7 8
[6,] 7 10
[7,] 9 10
Using merge() we get:
> merge(t(mat1), mat2)
a b
1 1 5
2 2 5
This gives us the rows that match between the two matrices. Note that
I transpose mat1 so that the structure matches that of mat2.
Then just use nrow() to get a count:
> nrow(merge(t(mat1), mat2))
[1] 2
See ?merge for more information.
HTH,
Marc Schwartz
More information about the R-help
mailing list