# [R] A co-occurrence matrix

John Fox jfox at mcmaster.ca
Tue Nov 11 13:39:09 CET 2003

```Dear Alexey,

You can use outer(), as follows:

> group <- c(1, 2, 1, 1, 3)

> matrix(as.numeric(outer(group, group, "==")), 5, 5)
[,1] [,2] [,3] [,4] [,5]
[1,]    1    0    1    1    0
[2,]    0    1    0    0    0
[3,]    1    0    1    1    0
[4,]    1    0    1    1    0
[5,]    0    0    0    0    1
>

If a logical result will do, the expression is even simpler:

> outer(group, group, "==")
[,1]  [,2]  [,3]  [,4]  [,5]
[1,]  TRUE FALSE  TRUE  TRUE FALSE
[2,] FALSE  TRUE FALSE FALSE FALSE
[3,]  TRUE FALSE  TRUE  TRUE FALSE
[4,]  TRUE FALSE  TRUE  TRUE FALSE
[5,] FALSE FALSE FALSE FALSE  TRUE

I hope that this helps,
John

At 10:49 AM 11/11/2003 +0000, Alexey Shipunov wrote:
>Dear R experts,
>
>I have a matrix (from some sort of
>classification) like this:
>
>       object  group
>  [1,] 1       1
>  [2,] 2       2
>  [3,] 3       1
>  [4,] 4       1
>  [5,] 5       3
>
>And I need something like this:
>
>       [,1] [,2] [,3] [,4] [,5]
>  [1,] 1    0    1    1    0
>  [2,] 0    1    0    0    0
>  [3,] 1    0    1    1    0
>  [4,] 1    0    1    1    0
>  [5,] 0    0    0    0    1
>
>where all zeros mean that these objects are not
>in same group, and vice versa.
>
>Is there a relatively simple way to construct co-
>uccurence matrices of type shown above?
>
>Any help would be appreciated,
>

-----------------------------------------------------
John Fox
Department of Sociology
McMaster University
email: jfox at mcmaster.ca
phone: 905-525-9140x23604
web: www.socsci.mcmaster.ca/jfox

```