1

我有一个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但至少有一个节点没有在该边缘上入射的边缘。

编辑

我也尝试过(我打赌不正确)使用函数 asneighborsincident,但似乎没有一个工作:

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"))

有什么建议么?

非常感谢!

4

0 回答 0