首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于在R中创建用于网络分析的多个图的循环或向量

用于在R中创建用于网络分析的多个图的循环或向量
EN

Stack Overflow用户
提问于 2018-07-27 13:04:54
回答 1查看 439关注 0票数 0

我已经从一个带有igraph的数据框中创建了一个图表,显示了学生如何在职业课程之间移动。前两列是“From”和“To”,它们包含资格名称(顶点),每次学生第一次注册课程(From)和随后注册另一个课程(To)时都会出现。其余列包含与该特定学生的人口统计相关的值。

我想创建和绘制从每个单独的课程(788个独特的课程)到“OR”的运动的各个网络。我可以通过子图或过滤原始数据帧来实现这一点,但我认为需要一个循环或lapply函数,这样我就不需要重复键入公式。我还想为每个网络创建一个图和PDF。不幸的是,我的R技能还不够好,不足以让我弄清楚loop/lapply部分。

我的数据框的前两列概述如下(出于隐私原因,我删除了学生信息):

代码语言:javascript
复制
    > dput(droplevels(head(df)))
structure(list(From = structure(c(5L, 1L, 6L, 4L, 2L, 3L), .Label = c("ADVANCED DIPLOMA OF ACCOUNTING", 
"ADVANCED DIPLOMA OF CONVEYANCING", "ADVANCED DIPLOMA OF LEADERSHIP AND MANAGEMENT", 
"ADVANCED DIPLOMA OF NETWORK SECURITY", "ADVANCED DIPLOMA OF POLICING", 
"ADVANCED DIPLOMA OF VISUAL ARTS"), class = "factor"), To = structure(c(5L, 
1L, 6L, 3L, 2L, 4L), .Label = c("DIPLOMA OF ACCOUNTING", "DIPLOMA OF EVENT MANAGEMENT", 
"DIPLOMA OF INFORMATION TECHNOLOGY NETWORKING", "DIPLOMA OF LEADERSHIP AND MANAGEMENT", 
"DIPLOMA OF POLICING", "DIPLOMA OF VISUAL ARTS"), class = "factor")), row.names = c(NA, 
6L), class = "data.frame")

然后创建图形,如下所示

代码语言:javascript
复制
g <- graph_from_data_frame(df, directed = TRUE, vertices = NULL)
E(g)$weight <- 1
    g <- delete.edges(g, which(E(g)$weight <= 10)) 
g <- delete.vertices(g,which(degree(g)==0))

然后,我通过一些颜色和标签的变化来使情节变得漂亮,并如下所示制作了一个pdf。

代码语言:javascript
复制
pdf("Qual_Pathways.pdf", width = 11.7, height = 16.5)
plot(g)
dev.off

我如何才能使From或To中的每个唯一值循环通过,以生成一系列788网络,以显示与该特定资格的连接?我真的很感谢任何人的帮助,我似乎找不到任何东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-27 14:51:38

我想这可能就是你想要做的。首先,确保setwd到一个所有绘图将被转储到的目录。接下来,创建一个包含所有ego图的对象,即只包含连接到特定节点的节点:

代码语言:javascript
复制
library(igraph)  # you must have loaded it earlier, but just in case
z <- make_ego_graph(g)

这将生成一个igraph对象列表:

代码语言:javascript
复制
> z
[[1]]
IGRAPH 3e60c3b DNW- 4 4 -- 
+ attr: name (v/c), salary_income (e/n), other_income (e/n), survey_weights (e/n), weight
| (e/n)
+ edges from 3e60c3b (vertex names):
[1] 1->1 2->1 4->1 6->1

[[2]]
IGRAPH 3e60c3b DNW- 2 2 -- 
+ attr: name (v/c), salary_income (e/n), other_income (e/n), survey_weights (e/n), weight
| (e/n)
+ edges from 3e60c3b (vertex names):
[1] 1->1 2->1

...

[[7]]
IGRAPH 3e60c3c DNW- 3 2 -- 
+ attr: name (v/c), salary_income (e/n), other_income (e/n), survey_weights (e/n), weight 
| (e/n)
+ edges from 3e60c3c (vertex names):
[1] 3->0 5->0

您可以将所有7个ego网络转储到如下文件中:

代码语言:javascript
复制
jpeg(filename="EgoGraph%03d.jpeg")
for (i in 1:length(z)) { plot(z[[i]]) }
dev.off()

现在去看看你setwd到的目录,将会有EgoGraph001.jpegEgoGraph007.jpeg。如果您对整个数据集执行此操作,并且它有788个节点,那么它将在该目录中提供788个绘图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51551082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档