使用 igraph 将大型网络拆分为多个子图
Splitting a large network into many subgraphs using igraph
我有一个大型数据集,其中包含来自不同学校的多个不同教室的社交网络数据。我想根据变量 "class_id"
或 "school_id"
将这个大网络拆分成许多较小的教室网络。我正在为标准数据帧寻找类似于 split
的函数,它允许您指定一个因子 f
来定义组数。我考虑过使用 igraph
包中的函数 induced_subgraph
。但是,查看包文档,该函数仅包含选项 vids
,其中应列出将构成子图的顶点。有没有办法使这个过程自动化(可能使用 lapply
)并指定引发分组的变量?或者,还有其他功能可以做到这一点吗?
是这样的吗?
library(igraph)
net <- erdos.renyi.game(n= 100, p = .05) # generate random graph
class_id <- sample(1:5, 100, replace = T) # generate random groups
# create list of group memberships
class_id_list <- lapply(unique(class_id), function(i,j){
which(j %in% i)},
j = class_id)
# extract subnets based on group memberships
split.net <- lapply(class_id_list, function(net, v){
induced_subgraph(net, vids = v)
},
net = net)
我有一个大型数据集,其中包含来自不同学校的多个不同教室的社交网络数据。我想根据变量 "class_id"
或 "school_id"
将这个大网络拆分成许多较小的教室网络。我正在为标准数据帧寻找类似于 split
的函数,它允许您指定一个因子 f
来定义组数。我考虑过使用 igraph
包中的函数 induced_subgraph
。但是,查看包文档,该函数仅包含选项 vids
,其中应列出将构成子图的顶点。有没有办法使这个过程自动化(可能使用 lapply
)并指定引发分组的变量?或者,还有其他功能可以做到这一点吗?
是这样的吗?
library(igraph)
net <- erdos.renyi.game(n= 100, p = .05) # generate random graph
class_id <- sample(1:5, 100, replace = T) # generate random groups
# create list of group memberships
class_id_list <- lapply(unique(class_id), function(i,j){
which(j %in% i)},
j = class_id)
# extract subnets based on group memberships
split.net <- lapply(class_id_list, function(net, v){
induced_subgraph(net, vids = v)
},
net = net)