2012-11-16 17 views
6

मेरे पास पाठ फ़ाइलों में गतिशील नेटवर्क की दो आसन्नता मैट्रिक्स हैं, आर (igraph) में अवधि 1 और 2। मैं हरे रंग के दूसरे नेटवर्क में नए अक्षरों और किनारों को रंगना चाहता हूं। तो इस दूसरे नेटवर्क सेमैं आर में आसन्न मैट्रिक्स से नोड्स और किनारों को कैसे रंग सकता हूं?

1 3 6 10 11 
1 NA NA NA NA NA 

3 NA NA NA NA NA 

6 NA NA NA 8.695652174 13.04347826 

10 NA NA 2.586206897 NA 3.448275862 

11 NA NA NA 2.919708029 NA 

और परिवर्तन:: आर में पढ़ने के लिए

1 2 3 6 10 
1 NA NA NA NA NA 

2 NA NA NA NA NA 

3 NA NA NA NA NA 

6 NA NA NA 12.32091691 8.022922636 

10 NA NA 7.228915663 NA NA 

कोड:

उदाहरण के लिए पहला नेटवर्क ऐसा दिखाई दे सकता

t1 <- structure(matrix(c(NA,NA,NA,NA,NA, 
         NA,NA,NA,NA,NA, 
         NA,NA,NA,8.695652174,13.04347826, 
         NA,NA,2.586206897,NA,3.448275862, 
         NA,NA,NA,2.919708029,NA),nrow=5, ncol=5, byrow=TRUE), 
       dimnames=list(c(1,3,6,10,11), c(1,3,6,10,11))) 

t2 <- structure(matrix(c(NA,NA,NA,NA,NA, 
         NA,NA,NA,NA,NA, 
         NA,NA,NA,NA,NA, 
         NA,NA,12.32091691,8.022922636,NA, 
         NA,NA,7.228915663,NA,NA),nrow=5, ncol=5, byrow=TRUE), 
       dimnames=list(c(1,2,3,6,10), c(1,2,3,6,10))) 

टी 3 < - संरचना (मैट्रिक्स (सी (एनए, एनए, एनए, एनए, एनए, NA, NA , 7.228 9, एनए, एनए, एनए, 10.4798, एनए, एनए, एनए, एनए, एनए, 8.1364, एनए, 3.8762, एनए, एनए, एनए, एनए, एनए), एनआरओ = 5, एनकॉल = 5, बाय्रो = TRUE), dimnames = list (c (1,3,4,6,10), सी (1,3,4,6,10))

मैं उन नेटवर्क को आर में कैसे जोड़ सकता हूं, इसलिए आर आर जानता है कि कौन से शिखर नए हैं?

+0

तुमसे एक सवाल हम में कटौती और अनुसंधान में पेस्ट अपने डेटा को पुन: कर सकते हैं में इस कर सकते हैं? संकेत: एक [छोटी] वस्तु का एक स्थायी प्रस्तुत करने के लिए 'dput (चीज़) 'का उपयोग करें ... – Spacedman

उत्तर

6

आदर्श रूप से समाधान graph.union पर कॉल करना होगा, लेकिन वर्तमान संस्करण में कुछ बग हैं, इसलिए यहां एक समाधान समाधान है।

आप लापता किनारों को चिह्नित करने के लिए NA का उपयोग कर रहे हैं, जो थोड़ा अजीब है, क्योंकि NA का अर्थ है कि आप नहीं जानते कि किनारे गुम है या नहीं। मैं शून्य के साथ NA एस को प्रतिस्थापित कर दूंगा।

t1[is.na(t1)] <- 0 
t2[is.na(t2)] <- 0 

g1 <- graph.adjacency(t1, weighted=TRUE) 
g2 <- graph.adjacency(t2, weighted=TRUE) 

## Vertices are easy 
V(g2)$color <- ifelse(V(g2)$name %in% V(g1)$name, "black", "darkgreen") 

## Edges are a bit trickier 
el1 <- apply(get.edgelist(g1), 1, paste, collapse="-") 
el2 <- apply(get.edgelist(g2), 1, paste, collapse="-") 
E(g2)$color <- ifelse(el2 %in% el1, "black", "green") 

plot(g2, vertex.label.color="white", vertex.label=V(g2)$name) 

enter image description here

+0

बहुत बहुत धन्यवाद। मैंने कोशिश की और यह किनारों के लिए सही काम करता है, लेकिन शिखर नीले रहते हैं, और काले या हरे रंग नहीं मिलता है। क्या मुझे एक विशेष पैकेज चाहिए? धन्यवाद – user1829340

+0

@ user1829340: क्या आपका मतलब है कि मेरे कोड की प्रतिलिपि बनाना और चिपकाना आपके लिए काम नहीं करता है? यह वास्तव में अजीब है। क्या आप वाकई अपने डेटा मैट्रिस में कॉलम और पंक्ति नाम हैं? –

+0

अब यह काम करता है, मुझे खेद है कि मैं dimnames भूल गया। अब मेरे पास एक तीसरा नेटवर्क है (आप उपरोक्त कोड देख सकते हैं)। मैं नेटवर्क टी 2 में लाल किनारों और शिखर लाल रंग कैसे बना सकता हूं, जो नेटवर्क टी 3 में गायब होने जा रहे हैं? – user1829340