2016-03-19 3 views
1

Как получить вершины, не имеющие предшественника на графике. Так, например, это данные графа:Найти вершины без предшествующих/входящих краев в igraph R

lfs = data.table(from = c('x', 'x', 'y'), to = c('y', 'p', 'z')) 
lfs 
# from to 
#: x y 
#: x p 
#: y z 
g = graph_from_data_frame(lfs) 
g 
# IGRAPH DN-- 4 3 -- 
# + attr: name (v/c) 
# + edges (vertex names): 
# [1] x->y x->p y->z 

На этом графике x не имеет никакого предшественника. Есть ли какая-либо функция запроса для получения таких вершин?

+1

'as_edgelist (г)' даст вам 'matrix', в которой первый столбец является«родителем»узел и второй является ребенок". Узлы без родителей - это те, которые не отображаются во втором столбце. Вы можете попробовать 'setdiff (V (g) $ name, as_edgelist (g) [, 2])'. – nicola

+1

Посмотрите на '? Ego'; которые вы можете использовать для поиска предков (и потомков) – user20650

ответ

2

Вы можете использовать degree найти ребер, идущих в узел

library(igraph) 
lfs <- data.frame(from = c('x', 'x', 'y'), to = c('y', 'p', 'z'))  
g <- graph_from_data_frame(lfs) 

# find the edges in to a node 
degree(g, mode="in") 
#x y p z 
#0 1 1 1 

# You can then subset to get the node names 
V(g)$name[!degree(g, mode="in")] 
# "x" 
Смежные вопросы