2017-10-18 77 views
0

如何计算节点与同一图的子图的关系?在学校的情况下,如何计算学生G在特定班级的朋友,而不管她在哪里?r igraph - 确定节点与子图的关系,而不考虑与子图的隶属关系

我的全球图形

library(igraph) 
school <- read.table(text=" 
         A B C D E F G 
        A 0 1 0 1 0 1 1 
        B 1 0 1 1 0 1 0 
        C 0 0 0 0 0 0 1 
        D 1 1 0 0 1 0 0 
        E 0 0 0 1 0 1 1 
        F 0 1 0 0 1 0 1 
        G 1 0 1 0 1 1 0", header=TRUE) 

mat <- as.matrix(school) 
schoolgraph <- graph.adjacency(mat, mode="undirected", add.rownames = T) 

我的子

schoolsub <- induced.subgraph(schoolgraph,1:3) 

IGRAPH 7dfb160 UN-- 3 2 -- 
+ attr: name (v/c), TRUE (v/c) 
+ edges from 7dfb160 (vertex names): 
[1] A--B B--C 

现在,我怎么在子图 “subschool” 计数的学生 “G” 的朋友有多少?结果应该是一个数字(G在学校有两个朋友)和一个名字列表(G是学校的A和C的朋友)。

回答

1

你可以先拿到邻居,并用它们来子集schoolsub

nbs <- neighbors(schoolgraph, "G")$name 
V(schoolsub)$name[V(schoolsub)$name %in% nbs] 
#[1] "A" "C" 
2

如何计算子图 “subschool”中学生“G”的朋友人数?

的一种方法是

sum(schoolgraph["G",V(schoolsub)$name]) 
# [1] 2 

slam::row_sums(schoolgraph[c("F", "G"),V(schoolsub)$name]) 
# F G 
# 2 2