Matriz de interacción por pares en R

Estoy tratando de calcular una matriz de pares en R que cuenta el número de veces que los individuos interactúan con otros individuos (por lo que la matriz incluirá N número de filas y columnas correspondientes al número de individuos). Tengo un marco de datos que enumera "actores" y "socios" en columnas separadas.

nn <- data.frame(actors=c('DOL','DOL','DOL','DOL','DOL','NOR','NOR','NOR','NIN','JOJ'),partners=c('JOJ','JOJ','NOR','NOR','NIN','NIN','DOL','JOJ','NOR','NOR'))

Los datos son tales que la dirección de la interacción es irrelevante, por lo que cada celda debe contar el número de veces que X actúa en Y más el número de veces que Y actúa en X. Idealmente, el marco de datos anterior debe dar una matriz como esta :

     DOL JOJ NOR NIN
DOL    0   2   3   1
JOJ    2   0   2   0
NOR    3   2   0   2
NIN    1   0   2   0

Comencé a escribir un bucle para recorrer cada individuo en mi conjunto de datos y para contar sus interacciones tanto de actor-> socio como socio-> actor. Estoy seguro de que esto funcionaría, pero no es ideal ya que el conjunto de datos completo es bastante grande. ¿Hay alguna manera mejor?

Actualización: ¡Gracias por las respuestas! Ambas soluciones funcionan muy bien! Estoy publicando mi implementación de la sugerencia de Josh, que fue muy útil.

x <- with(nn, table(actors, partners))
y <- t(x)

# unique individuals
u <- unique(c(rownames(x),colnames(x)))

m <- matrix(0,ncol=length(u),nrow=length(u),dimnames=list(u,u))

i1 <- as.matrix(expand.grid(rownames(x),colnames(x)))
i2 <- as.matrix(expand.grid(rownames(y),colnames(y)))

m[i1] <- x[i1]
m[i2] <- m[i2] + y[i2]

Respuestas a la pregunta(2)

Su respuesta a la pregunta