Jingy Niu
Jingy Niu

Reputation: 31

add edge attribute based on another network

I have two networks of same vertex based on different criteria. I want to add edge attributes of one of the network based on the connection of the other network. That is, if node A and B are connected in network 2, I want to note down "1" as the attribute in network 1, if not connected, note down "0". I am wondering how can I achieve my goal with R package or other software? Any suggestion is welcomed. Thanks a lot for suggestion!

Upvotes: 3

Views: 336

Answers (1)

G5W
G5W

Reputation: 37661

You can do this in R using the igraph package. Since you do not provide any data, I will make up an example.

Example Data

library(igraph)

set.seed(1234)
g1=erdos.renyi.game(10, 0.35)
g2=erdos.renyi.game(10, 0.35)
par(mfrow=c(1,2))
plot(g1)
plot(g2)

Two example graphs

Now we can create the edge attribute that you want. We initialize all values to zero, then loop through each edge in g2. If the same edge occurs in g1, we change the attribute to be 1.

E(g2)$net1 = 0
for(e in E(g2)) {
    if(are_adjacent(g1, ends(g2,e)[1], ends(g2,e)[2])) {
        E(g2)$net1[e] = 1 }
}

E(g2)$net1
[1] 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
E(g2)[which(E(g2)$net1 > 0)]
+ 4/19 edges from 3bdc176:
[1] 3--4 4--5 4--6 5--7

You can see that the attribute net1 says that the shared links are:
3--4 4--5 4--6 5--7
which agrees with the plot.

Upvotes: 1

Related Questions