Это относительно простая задача, если вы располагаете данными в подходящем формате, например, в списке краев:
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"
Надеюсь, это поможет.