我已经使用igraph从数据框中创建了一个图表,该图表显示了学生如何在职业课程之间移动。前两列是“发件人”和“发件人”,其中包含资格名称(顶点),每当学生第一次入学(发件人)然后再注册另一项(发件人)时,出现的资格名称。其余列包含与该特定学生的人口统计相关的值。
我想为每个单独的课程(788个独特的课程)创建和绘制运动“到”或“从”的单独网络。我可以通过子图或过滤原始数据帧来实现此目的,但是我认为需要使用循环或lapply函数,这样就无需重复键入公式。我还想为每个网络创建一个图和PDF。不幸的是,我的R技能还不足以让我找出循环/不适的部分。
我的数据框的前两列概述如下(出于隐私原因,我已删除了学生信息):
> 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")
然后我按如下方式创建图形
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文件。
pdf("Qual_Pathways.pdf", width = 11.7, height = 16.5)
plot(g)
dev.off
我该如何做到,这样就可以遍历From或To中的每个唯一值,以形成一系列788个网络,这些网络显示了与该特定资格的联系和来自该特定资格的联系?我真的很感谢任何帮助,我似乎什么也找不到。
答案 0 :(得分:0)
我认为也许这就是您要尝试做的。首先,请确保setwd
到所有绘图都将转储到的目录。接下来,创建一个对象以包含所有自我图,即仅包含连接到特定节点的节点:
library(igraph) # you must have loaded it earlier, but just in case
z <- make_ego_graph(g)
这将生成igraph
个对象的列表:
> 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
您可以将所有七个自我网络转储到以下文件中:
jpeg(filename="EgoGraph%03d.jpeg")
for (i in 1:length(z)) { plot(z[[i]]) }
dev.off()
现在转到您setwd
所在的目录中,从EgoGraph001.jpeg
到EgoGraph007.jpeg
。如果对整个数据集执行此操作,并且该数据集具有788个节点,则将在该目录中提供788个图。