我有一个igraph
名为的对象y
,它包含inventor
顶点和patent
边。
每个vertex
都有一个属性city
,指的是发明者的位置。每个edge
都有一个属性h_city
,指的是发明者或公司的位置。
我只想选择至少一位发明人位于 X 市且该专利的至少一位发明人不在 X 市的专利。
如果我运行以下脚本,我也会得到专利,其中没有一个发明人住在 X 市,但公司位于那里:
city_x<-subgraph.edges(y, which(E(y)$h_city=="x"))
如果我按照 MrFlick 的建议运行以下脚本来回答一个不同的问题,我最终也会获得所有发明人都来自 X 市的专利:
city_x<- subgraph.edges(y, E(y)[inc(V(y)[city=="x"])])
下面我举一个例子,也是由 MrFlick 为不同的答案制作的 - 我稍微改变了它:
library(igraph)
y <- graph.atlas(711)
V(y)$name <- 1:7
V(y)$prop <- c(1,2,2,3,3,1,1)
V(y)$color <- ifelse(V(y)$prop>=3, "red","yellow")
这会产生:
E(y)[inc(V(y)[prop>=3])]
#Edge sequence:
#[3] 4 -- 3
#[4] 5 -- 4
#[5] 6 -- 5
#[10] 5 -- 3
使用此代码,我还包括节点号 4 和 5 之间的边 #4,因为它们都有prop>=3
. 我不想选择那个边缘。至少一个节点需要匹配标准,至少一个节点不需要。
对于此示例:如何仅选择至少有一个节点具有prop>=3
但至少有一个节点没有在该边缘上入射的边缘。
编辑:
我也尝试过(我打赌不正确)使用函数 asneighbors
和incident
,但似乎没有一个工作:
test2<-graph.neighborhood(subgraph.edges(g,which(E(y)$h_city=="x")),order = 1)
test3<-neighbors(g, which(E(y)$h_city=="x"))
test4<-incident(g, which(E(y)$h_city=="x"))
有什么建议么?
非常感谢!