Paarweise Interaktionsmatrix in R

Ich versuche, eine paarweise Matrix in R zu berechnen, die zählt, wie oft Individuen mit anderen Individuen interagieren (also wird die Matrix N Zeilen- und Spaltenzahlen enthalten, die der Anzahl der Individuen entsprechen). Ich habe einen Datenrahmen, der "Akteure" und "Partner" in separaten Spalten auflistet.

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'))

Die Daten sind so, dass die Richtung der Interaktion irrelevant ist. Daher sollte jede Zelle die Anzahl der Einwirkungen von X auf Y und die Anzahl der Einwirkungen von Y auf X zählen. Idealerweise sollte der obige Datenrahmen eine Matrix ergeben, die so aussieht :

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

Ich habe angefangen, eine Schleife zu schreiben, um jede Person in meinem Datensatz zu durchlaufen und ihre / seine Interaktionen sowohl von Schauspieler-> Partner als auch von Partner-> Schauspieler zu zählen. Ich bin sicher, dass dies funktionieren würde, aber es ist nicht ideal, da der gesamte Datensatz ziemlich groß ist. Gibt es einen besseren Weg?

Update: Danke für die Antworten! Beide Lösungen funktionieren hervorragend! Ich veröffentliche meine Implementierung von Joshs Vorschlag, der sehr hilfreich war.

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]

Antworten auf die Frage(2)

Ihre Antwort auf die Frage