igraph中的2度连接

时间:2011-11-04 15:26:02

标签: r social-networking

我认为这个工作正常,但我希望模仿类似Facebook的朋友建议。简单地说,我希望找到二级联系(你的朋友的朋友,你没有连接)。我确实希望将其保留为有向图,并确定第二度外向连接(您朋友所连接的人)。

我相信我的虚拟代码实现了这一点,但由于引用是在索引而不是顶点标签上,我希望你能帮我修改代码以返回可用的名称。

### create some fake data
library(igraph)

from <- sample(LETTERS, 50, replace=T)
to <- sample(LETTERS, 50, replace=T)
rel <- data.frame(from, to)
head(rel)    

### lets plot the data
g <- graph.data.frame(rel)
summary(g)
plot(g, vertex.label=LETTERS, edge.arrow.size=.1)


## find the 2nd degree connections
d1 <- unlist(neighborhood(g, 1, nodes="F", mode="out"))
d2 <- unlist(neighborhood(g, 2, nodes="F", mode="out"))
d1;d2;
setdiff(d2,d1)

返回

> setdiff(d2,d1)
[1] 13

您可以提供的任何帮助都会很棒。显然我希望留在R。

2 个答案:

答案 0 :(得分:4)

您可以回溯到图形顶点,如:

> V(g)[setdiff(d2,d1)]
Vertex sequence:
[1] "B" "W" "G"

另请查看?V了解通过直接索引获取此类信息的方法。

答案 1 :(得分:2)

你可以使用图形$ g $的邻接矩阵$ G $(这里没有乳胶吗?)。邻接矩阵的一个属性是它的n次幂给出$ n $ -walks的数量(长度为n的路径)。

G <- get.adjacency(g)

G2 <- G %*% G        # G2 contains 2-walks
diag(G2) <- 0        # take out loops
G2[G2!=0] <- 1 # normalize G2, not interested in multiplicity of walks

g2 <- graph.adjacency(G2)

g2中的边缘代表“朋友的朋友”债券。

相关问题