首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建分组边缘列表

创建分组边缘列表
EN

Stack Overflow用户
提问于 2021-02-15 21:48:47
回答 1查看 47关注 0票数 2

我有一个人的名单,我想检查他们的合作网络的特点。然而,我想使用他们网络的所有边缘,而不仅仅是直接连接到他们的边缘。例如,假设我正在查看Bob的网络。对于Project1,鲍勃,比尔和简一起工作。

如果我只关心与Bob相关的边缘,那么我的边缘列表将是:Bob-Bill,Bob-Jane。网络会有0个三角形。然而,如果我看看Bob网络的所有边缘,边缘列表会是这样的: Bob--Bill,Bob--Jane,Bill--Jane,Jane,Jane。网络将有一个三角形。

唯一能做到这一点的方法是创建一个“分组”边缘列表。我只是不知道该怎么处理。

我的边缘数据如下所示:

代码语言:javascript
复制
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"))
代码语言:javascript
复制
   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

我有另一个载体可以保存我的目标人物的名字:

代码语言:javascript
复制
targets <- data.frame(name=c("Bob","Jane"))

我想要做的是将相关的边缘分组到适当的目标之下,这样做的结果如下:

代码语言:javascript
复制
   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有更好的方法来做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-15 22:25:55

这里可能有一个选择

代码语言:javascript
复制
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)))
      }
    )
  )
)

这给

代码语言:javascript
复制
   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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66215837

复制
相关文章

相似问题

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