2014-03-02 15 views
0

我有一个标准的EdgeList都:指定颜色到边缘时往复运动

[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->22->1(如上)的另一颜色例如橙子。 我无法解决如何做到这一点。

+0

感谢您编辑Ken。 – user14470

回答

0

想到这一点之后,我想到这可能会很棘手,而且有人可能已经这样做了,因为网络在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) 

m中的T/F矢量然后可根据需要使用着色的边缘。

请注意,在这个例子中,在同一个节点/顶点和重复的边上开始和结束的边被函数计算为“相互”。如果你有这些以及相反的边缘,你可能不得不做一些额外的摆弄。这个例子有一个倒数边(1 < - > 3)。

+0

非常感谢Bryan,这的确解决了这个问题。对不起,错过了它。我没有任何自我联系,所以这看起来就是票。 – user14470