這可能是一個非常直接的問題,但我似乎無法解決這個問題。在R如何根據邊緣值選擇網絡對象中的節點?
在R我擁有251739個節點(發明人)和759804個邊緣(專利合作)的網絡對象。節點和邊都有屬性文件。其中一個邊緣屬性是appyear
,即發明人申請專利的年份。
我想編寫一個專利的所有節點,這些專利的appyear == 2005
到一個新的網絡。
有人可以給我一些指示如何做到這一點?我使用最新版本的R和STATNET軟件包。
這可能是一個非常直接的問題,但我似乎無法解決這個問題。在R如何根據邊緣值選擇網絡對象中的節點?
在R我擁有251739個節點(發明人)和759804個邊緣(專利合作)的網絡對象。節點和邊都有屬性文件。其中一個邊緣屬性是appyear
,即發明人申請專利的年份。
我想編寫一個專利的所有節點,這些專利的appyear == 2005
到一個新的網絡。
有人可以給我一些指示如何做到這一點?我使用最新版本的R和STATNET軟件包。
所以這是一個使用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))
感謝您的回覆jlhoward。很有幫助!奇蹟般有效。 –
版的statnet '網絡' 包的1.11加入eid
參數給get.inducedSubgraph()
功能。所以應該能夠直接提取僅包含匹配邊的網絡,幾乎與igraph示例相同。
創建樣本數據集,名爲網絡的作者「:
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))
這是更容易,如果幫你你的問題包括一個[可重現的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。分享所有數據可能並不是一個好主意,但也許您可以重新創建一個玩具示例,以準確顯示您如何構建網絡並分配邊緣屬性。 – MrFlick