我有一个人的名单,我想检查他们的合作网络的特点。然而,我想使用他们网络的所有边缘,而不仅仅是直接连接到他们的边缘。例如,假设我正在查看Bob的网络。对于Project1,鲍勃,比尔和简一起工作。
如果我只关心与Bob相关的边缘,那么我的边缘列表将是:Bob-Bill,Bob-Jane。网络会有0个三角形。然而,如果我看看Bob网络的所有边缘,边缘列表会是这样的: Bob--Bill,Bob--Jane,Bill--Jane,Jane,Jane。网络将有一个三角形。
唯一能做到这一点的方法是创建一个“分组”边缘列表。我只是不知道该怎么处理。
我的边缘数据如下所示:
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有更好的方法来做到这一点?
发布于 2021-02-15 22:25:55
这里可能有一个选择
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 Jillhttps://stackoverflow.com/questions/66215837
复制相似问题