Назначить цвет ребру при возвратно-поступательном движении
У меня есть стандартный край списка:
[1] 1 -> 2 [2] 1 -> 3 [3] 1 -> 6 [4] 2 -> 1 [5] 2 -> 3 [6] 2 -> 4 [7] 2 -> 5
Я хотел бы покрасить края в соответствии с тремя правилами:
и) если первое значение меньше второго -> синий
ii) если первое значение больше второго -> красный
Это кажется довольно простым:
y.ed<-as.edgelist(am.ed) z<-as.data.frame(y.ed) m<-z[,1] n<-z[,2] o<-ifelse(m<n, "red", "blue")
Однако я хотел бы iii) цвет взаимных связей, т.е. 1->2
, 2->1
(как указано выше) другой цвет, например, оранжевый. Я не могу понять, как это сделать.
1 ответ
Подумав об этом немного, мне пришло в голову, что это может быть сложно, и что кто-то, вероятно, уже сделал это, так как сети являются областью довольно тяжелого применения в R
, В упаковке igraph
Я нашел подход, который будет работать, если вы сможете немного переформатировать свой список краев. Вот пример использования составных данных:
library("igraph")
set.seed(11)
ed <- sample(1:10, 30, replace = TRUE)
g <- graph(edges = ed)
str(g)
plot(g)
m <- is.mutual(g)
Вектор T/F в m
затем можно использовать для окрашивания ваших краев по желанию.
Обратите внимание, что в этом примере ребро, начинающееся и заканчивающееся в том же узле / вершине и дублированных ребрах, учитывается функцией как "взаимное". Если у вас есть эти, а также взаимные края, вам, возможно, придется немного поиграться. Этот пример имеет одно обратное ребро (1 <-> 3).