如何在图中找到具有一个度但没有度的顶点?

时间:2020-02-10 18:00:43

标签: r igraph

我有一个无方向的论文网络,它们相互引用。我想找到具有“出度”(即引用了一篇论文)但没有“入度”(任何人都未引用)的论文/节点/顶点。

这似乎是一个非常简单的问题,但我无法在堆栈溢出/互联网的任何地方找到答案。

谢谢您的帮助!

编辑:举个例子,具有单个入度而没有出度的边列表如下所示:

Paper1 -> Paper3
Paper2 -> Paper3
Paper4 -> Paper1
Paper1 -> Paper4
Paper5 -> Paper1
Paper6 -> Paper4

在此示例中,我只想知道Paper5和Paper6的身份,它们引用了一篇论文,但未引用。它不需要在边缘列表中(尽管也可以)。因此,期望的输出是:

identified_papers <- c("Paper5", "Paper6")

1 个答案:

答案 0 :(得分:1)

一旦您以适当的格式(例如,边缘列表:

from <- c("Paper1", "Paper2", "Paper4", "Paper1", "Paper5", "Paper6")
to <- c("Paper3", "Paper3", "Paper1", "Paper4", "Paper1", "Paper4")
edgelist <- cbind(from, to)

> edgelist
     from     to      
[1,] "Paper1" "Paper3"
[2,] "Paper2" "Paper3"
[3,] "Paper4" "Paper1"
[4,] "Paper1" "Paper4"
[5,] "Paper5" "Paper1"
[6,] "Paper6" "Paper4"

使用igraph可以从edgelist生成图形

library(igraph)
g <- graph_from_edgelist(edgelist)

使用degree函数以获取学位,并通过设置mode参数来指定是否计算学位或学位:

> degree(g, mode = "in")
  Paper1 Paper3 Paper2 Paper4 Paper5 Paper6 
     2      2      0      2      0      0 

> degree(g, mode = "out")
  Paper1 Paper3 Paper2 Paper4 Paper5 Paper6 
     2      0      1      1      1      1

从那里可以组合which内的查询条件以满足要求,并使用names提取相应的论文:

hits <- which(degree(g, mode = "in") == 0 & degree(g, mode = "out") == 1)
identified_papers <- names(hits)

> identified_papers
  [1] "Paper2" "Paper5" "Paper6"

我希望这会有所帮助。

相关问题