在R中如何根据边缘值选择网络对象中的节点?

时间:2014-06-11 16:00:46

标签: r networking attributes edge statnet

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

在R中,我有一个251739个节点(发明者)和759804个边缘的网络对象(专利上的合作)。节点和边都有属性文件。这种边缘属性之一是appyear,即发明人申请专利的年份。

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

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

2 个答案:

答案 0 :(得分:1)

所以这是使用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))

答案 1 :(得分:1)

statnet&#39;网络版本1.11&#39; package为eid函数添加了get.inducedSubgraph()参数。因此应该能够直接提取仅包含匹配边的网络,几乎与igraph示例相同。

创建样本数据集,名为&#39; authors&#39;:

的网络
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)

提取一个新的网络对象,其中只包含“适用于”的边缘。 == 2005

authors2005<-get.inducedSubgraph(authors,eid=which(authors%e%'appyear'==2005))