आर

2012-10-19 8 views
7

में जोड़वाई इंटरैक्शन मैट्रिक्स मैं आर में एक जोड़ीदार मैट्रिक्स की गणना करने की कोशिश कर रहा हूं जो कि व्यक्तियों के साथ अन्य व्यक्तियों के साथ बातचीत करने की संख्या की गणना करता है (इसलिए मैट्रिक्स में व्यक्तियों की संख्या के अनुरूप पंक्तियों और स्तंभों की संख्या शामिल होगी)। मेरे पास एक डेटाफ्रेम है जो अलग-अलग कॉलम में "अभिनेता" और "सहयोगी" सूचीबद्ध करता है।आर

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

डेटा ऐसी है कि बातचीत की दिशा अप्रासंगिक है, इसलिए प्रत्येक कोशिका बार प्लस Y पर अलग-अलग एक्स में कार्य करता है समय की संख्या Y आदर्श रूप में एक्स पर कार्य करता है, डेटा फ्रेम से ऊपर होना चाहिए की संख्या की गणना करना चाहिए एक मैट्रिक्स है कि इस तरह दिखता है दे:

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

मैं अपने डेटासेट में प्रत्येक व्यक्ति के माध्यम से चक्र के लिए एक पाश लिखना शुरू किया और दोनों अभिनेता से साथी और partner-> अभिनेता> उसका/उसकी बातचीत गिनती करने के लिए। मुझे यकीन है कि यह काम करेगा, लेकिन आदर्श नहीं है क्योंकि पूर्ण डेटासेट काफी बड़ा है। क्या कोई बेहतर तरीका है?


अद्यतन: प्रतिक्रिया के लिए धन्यवाद! दोनों समाधान महान काम करते हैं! मैं जोश के सुझाव के कार्यान्वयन को पोस्ट कर रहा हूं, जो बहुत उपयोगी था।

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] 

उत्तर

6

बेस आर के table() आप क्या कर रहे हैं आप मिल जाएगा के बाद:

x <- with(nn, table(actors, partners)) 
x + t(x) 
#  partners 
# actors DOL JOJ NIN NOR 
# DOL 0 2 1 3 
# JOJ 2 0 0 2 
# NIN 1 0 0 2 
# NOR 3 2 2 0 
+0

साफ, इसलिए यह अनिवार्य रूप से '(एनएन, टेबल (अभिनेता, सहयोगी) + टेबल (साझेदार, अभिनेता)) है' सही? – thelatemail

+0

इस समाधान के लिए धन्यवाद! मैंने देखा कि यह काम नहीं करता है यदि ट्रांसपोज़ेड तालिका उसी पंक्ति और कॉलम नाम को मूल के रूप में साझा नहीं करती है, जो तब हो सकती है जब कुछ इंटरैक्शन केवल एक दिशा में दिखाई देते हैं। मैं सभी संभावित व्यक्तियों के साथ एक मास्टर मैट्रिक्स बनाकर इसके आसपास मिला, फिर सूचकांक का उपयोग केवल पंक्तियों और स्तंभों को जोड़ने के लिए किया जो जोड़ने से पहले मेल खाते थे। मैंने इस तरह के इंडेक्स की गणना की (एक मूल और ट्रांसपोज़ेड टेबल दोनों के लिए) 'i <- as.matrix (expand.grid (rownames (x), colnames (x))) ' – boon

5

ग्राफ सिद्धांत के क्षेत्र में, क्या आप देख रहे हैं एक निकटता मैट्रिक्स है:

library(igraph) 
g <- graph.edgelist(as.matrix(nn), directed = FALSE) 
get.adjacency(g) 
#  DOL JOJ NOR NIN 
# DOL 0 2 3 1 
# JOJ 2 0 2 0 
# NOR 3 2 0 2 
# NIN 1 0 2 0 
+0

यह सही है। बहुत बहुत धन्यवाद - आपने मुझे बहुत समय बचाया! एक खोज योग्य नाम के साथ इसे जोड़ने के लिए – boon

+2

+1। –

+0

@ जोशो'ब्रायन आप इस मैट्रिक्स से तत्व कैसे चुनते हैं? – andi