To powinno być proste, ale chcę uzyskać liczbę wzajemnych krawędzi związanych ze wszystkimi wierzchołkami na moim wykresie:

library(igraph)
ed <- data.frame(from = c(1,1,2,3,3), to = c(2,3,1,1,2))
ver <- data.frame(id = 1:3)
gr <- graph_from_data_frame(d = ed,vertices = ver, directed = T)
plot(gr)

Graph

Wiem, że mogę użyć which_mutual dla krawędzi, ale czy istnieje odpowiednik, aby uzyskać coś takiego:

# vertex  edges  no_mutual
#      1      2          2
#      2      1          1
#      3      2          1

UDPATE: Poprawiono niespójności w tabeli wyjściowej, jak wskazano przez Emilliman5

2
InspectorSands 15 luty 2017, 15:41

1 odpowiedź

Nie jestem pewien, jak dobrze jest skalować, ale wykonuje pracę. Twoja oczekiwana tabela ma pewne niespójności, więc zrobiłem najlepsze, jakie mogę, tj. Wierzchołek 2 ma tylko jedną krawędź pochodzącej, a nie 2.

mutual_edges <- lapply(V(gr), function(x) which_mutual(gr, es = E(gr)[from(x) | to(x)]))
df <- data.frame(Vertex=names(mutual_edges), 
                 Edges=unlist(lapply(V(gr), function(x) length(E(gr)[from(x)]) )), 
                 no_mutual=unlist(lapply(mutual_edges, function(x) sum(x)/2)))
df

#  Vertex Edges no_mutual
#1      1     2         2
#2      2     1         1
#3      3     2         1
0
InspectorSands 15 luty 2017, 14:11