【发布时间】:2021-02-16 06:25:55
【问题描述】:
我有一个人员列表,我想检查他们协作网络的特征。但是,我想使用他们网络的所有边缘,而不仅仅是直接连接到它们的边缘。例如,假设我正在查看 Bob 的网络。对于 Project1,Bob、Bill 和 Jane 一起工作。
如果我只关心连接到 Bob 的边,那么我的边列表将是:Bob--Bill、Bob--Jane。网络将有 0 个三角形。但是,如果我查看 Bob 网络的所有边,边列表将如下所示:Bob--Bill、Bob--Jane、Bill--Jane。网络将有 1 个三角形。
我能想到的唯一方法是创建一个“分组”边缘列表。我只是不确定如何解决它。
我的边缘数据如下所示:
collab <- data.frame(vertex1 = c("Bob","Bill","Bob","Jane","Bill","Jane","Bob","Jane","Bob","Bill","Bob"
,"Jane","Bill","Jane","Bob","Jane","Jane","Jill","Jane","Susan","Susan"),
edgeID = c(1,1,1,1,1,1,2,2,1,1,1,1,1,1,2,2,3,3,3,3,3),
vertex2 = c("Bill","Bob","Jane","Bob","Jane","Jill","Jane","Bob","Bill","Bob"
,"Jane","Bob","Jane","Bill","Jane","Bob","Jill","Jane","Susan","Jane","Jill"))
vertex1 edgeID vertex2
1 Bob 1 Bill
2 Bill 1 Bob
3 Bob 1 Jane
4 Jane 1 Bob
5 Bill 1 Jane
6 Jane 1 Jill
7 Bob 2 Jane
8 Jane 2 Bob
9 Jane 3 Jill
10 Jill 3 Jane
11 Jane 3 Susan
12 Susan 3 Jane
13 Susan 3 Jill
我有另一个向量包含我的目标人的名字:
targets <- data.frame(name=c("Bob","Jane"))
我想做的是将相关边缘分组到适当的目标下,这样结果类似于:
group vertex1 edgeID vertex2
1 Bob Bob 1 Bill
2 Bob Bill 1 Bob
3 Bob Bob 1 Jane
4 Bob Jane 1 Bob
5 Bob Bill 1 Jane
6 Bob Jane 1 Jill
7 Bob Bob 2 Jane
8 Bob Jane 2 Bob
9 Jane Bob 1 Bill
10 Jane Bill 1 Bob
11 Jane Bob 1 Jane
12 Jane Jane 1 Bob
13 Jane Bill 1 Jane
14 Jane Jane 1 Bill
15 Jane Bob 2 Jane
16 Jane Jane 2 Bob
17 Jane Jane 3 Jill
18 Jane Jill 3 Jane
19 Jane Jane 3 Susan
20 Jane Susan 3 Jane
21 Jane Susan 3 Jill
我认为,如果我能到达这里,我可以创建一个循环遍历每个目标的 for 循环,使用 iGraph 创建一个图形,并计算 Bob 和 Jane 的网络指标,而不会出现太多问题。我是否以正确的方式解决这个问题,还是 iGraph 有更好的方法来做到这一点?
【问题讨论】: