gpt4 book ai didi

R 和 igraph : subgraph nodes based on attributes of other nodes that are incident on edge

转载 作者:行者123 更新时间:2023-12-04 11:26:06 24 4
gpt4 key购买 nike

我有专利发明人的合作数据。每个发明人是一个节点,每条边代表两个发明人合作的专利。有些专利的发明人超过 2 位,因此有些专利用多条边表示。

我想对至少一名发明人位于 BOISE 的专利进行子图,但并非所有发明人都位于 BOISE。其他专利和发明人需要从选择中排除。

例如:

gg <- graph.atlas(711)
V(gg)$name <- 1:7
V(gg)$city <- c("BOISE","NEW YORK","NEW YORK","BOISE","BOISE","LA","LA")
V(gg)$color <- ifelse(V(gg)$city=="BOISE", "orange","yellow")
gg<-delete.edges(gg, E(gg, P=c(1,2,2,3,2,7,7,6,7,3,3,4,3,5,4,5,5,6,6,1)))
gg <- add.edges(gg,c(1,4,4,5,5,1),attr=list(patent=1))
gg <- add.edges(gg,c(7,5,5,4,4,7),attr=list(patent=2))
gg <- add.edges(gg,c(7,3,3,5,5,7),attr=list(patent=3))
gg <- add.edges(gg,c(2,7,7,6,6,2),attr=list(patent=4))
gg <- add.edges(gg,c(6,4),attr=list(patent=5))
plot(gg, edge.label=E(gg)$patent)

产生:

network example

从这个网络中,我只想绘制所有发生在专利 2、3、5 边缘的节点的子图。

在这个例子中,节点 1 不应该出现在子图中。此外,还应排除与专利 #1 有关的从节点 5 到节点 4 的边。

我一直在努力解决这个问题一段时间了。这是可能的吗?

最佳答案

这个怎么样

#final all patent names
patents <- unique(edge.attributes(gg)$patent)

#check if criteria are met for patent
okpatents <- sapply(patents, function(p){
cities <- V(gg)[inc(E(gg)[patent==p])]$city
nc <- sum(cities=="BOISE")
return(nc>0 & nc < length(cities))
})

#extract subgraph
gs <- subgraph.edges(gg, E(gg)[patent %in% patents[okpatents]])

#verify
plot(gs, edge.label=E(gs)$patent)

enter image description here

附注。非常好的可重现示例;)

关于R 和 igraph : subgraph nodes based on attributes of other nodes that are incident on edge,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25507007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com