计算R中两个顶点之间的共同邻居数
Counting the number of neighbors in common between two vertices in R
我已经尝试计算两个顶点之间的公共邻居数。
测试文件包含
1 2
1 4
1 5
2 3
2 4
2 5
3 4
y<-read.table("test.txt")
require(igraph)
g<-graph.data.frame(y, directed=F, vertices=NULL)
for(i in 1:5)
{
for(j in 1:5)
{
c[i,j]<-cocitation(g,i)[j]
}}
y$neigC<-c[y$V1,y$V2]
但是,当我尝试将它添加到数据框时,它没有给我正确的答案。
试试这个:
y<-structure(list(V1 = c(1L, 1L, 1L, 2L, 2L, 2L, 3L),
V2 = c(2L, 4L, 5L, 3L, 4L, 5L, 4L)),
.Names = c("V1", "V2"), class = "data.frame", row.names = c(NA, -7L))
require(igraph)
g<-graph.data.frame(y, directed=F, vertices=NULL)
d<-cocitation(g)
y[,3]<-sapply(1:nrow(y),function(x){d[y[x,1],y[x,2]]}) # or diag(d[y[,1],y[,2]])
y
V1 V2 V3
1 1 2 2
2 1 4 1
3 1 5 1
4 2 3 1
5 2 4 2
6 2 5 1
7 3 4 1
这里是 g
:
和d
(我重命名了)看起来像这样:
unname(d)
[,1] [,2] [,3] [,4] [,5]
[1,] 0 2 2 1 1
[2,] 2 0 1 2 1
[3,] 2 1 0 1 1
[4,] 1 2 1 0 2
[5,] 1 1 1 2 0
这是您所期望的吗?
我已经尝试计算两个顶点之间的公共邻居数。
测试文件包含
1 2
1 4
1 5
2 3
2 4
2 5
3 4
y<-read.table("test.txt")
require(igraph)
g<-graph.data.frame(y, directed=F, vertices=NULL)
for(i in 1:5)
{
for(j in 1:5)
{
c[i,j]<-cocitation(g,i)[j]
}}
y$neigC<-c[y$V1,y$V2]
但是,当我尝试将它添加到数据框时,它没有给我正确的答案。
试试这个:
y<-structure(list(V1 = c(1L, 1L, 1L, 2L, 2L, 2L, 3L),
V2 = c(2L, 4L, 5L, 3L, 4L, 5L, 4L)),
.Names = c("V1", "V2"), class = "data.frame", row.names = c(NA, -7L))
require(igraph)
g<-graph.data.frame(y, directed=F, vertices=NULL)
d<-cocitation(g)
y[,3]<-sapply(1:nrow(y),function(x){d[y[x,1],y[x,2]]}) # or diag(d[y[,1],y[,2]])
y
V1 V2 V3
1 1 2 2
2 1 4 1
3 1 5 1
4 2 3 1
5 2 4 2
6 2 5 1
7 3 4 1
这里是 g
:
和d
(我重命名了)看起来像这样:
unname(d)
[,1] [,2] [,3] [,4] [,5]
[1,] 0 2 2 1 1
[2,] 2 0 1 2 1
[3,] 2 1 0 1 1
[4,] 1 2 1 0 2
[5,] 1 1 1 2 0
这是您所期望的吗?