如何解决创建分组边列表
我有一份人员名单,我想检查他们协作网络的特征。但是,我想使用他们网络的所有边,而不仅仅是直接连接到它们的边。例如,假设我正在查看 Bob 的网络。对于 Project1,鲍勃、比尔和简一起工作。
如果我只关心连接到 Bob 的边,那么我的边列表将是:Bob--Bill、Bob--Jane。该网络将有 0 个三角形。但是,如果我查看 Bob 网络的所有边,边列表将如下所示:Bob--Bill、Bob--Jane、Bill--Jane。网络将有 1 个三角形。
我能想到的唯一方法是创建一个“分组”边缘列表。我只是不知道如何解决它。
我的边缘数据如下所示:
collab <- data.frame(vertex1 = c("Bob","Bill","Bob","Jane","Jill","Susan","Susan"),edgeID = c(1,1,2,3,3),vertex2 = c("Bill","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 有更好的方法来做到这一点?
解决方法
这可能是一种选择
g <- graph_from_data_frame(collab[c(1,3,2)],directed = FALSE)
do.call(
rbind,c(
make.row.names = FALSE,lapply(
targets$name,function(nm) {
z <- c(nm,V(g)$name[distances(g,nm) == 1])
cbind(group = nm,unique(subset(collab,vertex1 %in% z & vertex2 %in% z)))
}
)
)
)
给出
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 Bob 2 Jane
7 Bob Jane 2 Bob
8 Bob Jane 1 Bill
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 Jill
15 Jane Bob 2 Jane
16 Jane Jane 2 Bob
17 Jane Jane 1 Bill
18 Jane Jane 3 Jill
19 Jane Jill 3 Jane
20 Jane Jane 3 Susan
21 Jane Susan 3 Jane
22 Jane Susan 3 Jill
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。