2

这可能是一个非常直接的问题,但我似乎无法解决。

在 RI 中有一个由 251739 个节点(发明人)和 759804 个边(专利合作)组成的网络对象。节点和边都有属性文件。其中一个边缘属性是appyear,即发明人申请专利的年份。

我想将所有与专利相关的节点写入appyear == 2005新网络。

有人可以给我一些关于如何做到这一点的指导吗?我使用最新版本的 R 和 STATNET 包。

4

2 回答 2

3

所以这里有一个使用igraph包的方法。

library(igraph)
# create an igraph with 25 authors; you have this already...
set.seed(1)
m <- matrix(sample(0:1,625,replace=T),nc=25)
diag(m) <- 0      # authors don't collaborate with themselves
g <- graph.adjacency(m,weight=T)                      # create the graph
E(g)$appyear <- sample(2000:2015,ecount(g),replace=T) # create an edge attribute "appyear"

# you start here...
g.new <- subgraph.edges(g,eids=which(E(g)$appyear==2005))
par(mfrow=c(1,2))
plot(g)
plot(g.new)

statnet使用类的对象network,所以我们最后转换。

library(network)
new.network <- as.network(get.edgelist(new.g))
于 2014-06-11T20:19:40.590 回答
1

statnet 'network' 包的 1.11 版eid向函数添加了一个参数get.inducedSubgraph()。所以应该能够直接提取只包含匹配边的网络,几乎与 igraph 示例相同。

创建示例数据集,一个名为“authors”的网络:

m <- matrix(sample(0:1,625,replace=T),nc=25)
diag(m) <- 0
authors<-as.network(m)
authors%e%'appyear' <- sample(2000:2015,network.edgecount(authors),replace=T)

提取一个仅包含 'appyear' == 2005 边缘的新网络对象

authors2005<-get.inducedSubgraph(authors,eid=which(authors%e%'appyear'==2005))
于 2015-01-07T22:15:19.213 回答