簡體   English   中英

將邊緣值轉換為R中的網絡對象后將其保留在圖中

[英]Keeping edge values in graph after converting it to a network object in R

注意1:我使用的是R包“ network”和“ sna”

注意2:我的原始數據在.csv文件中為邊緣列表格式。

我一直在尋找將邊緣列表數據讀入R的最佳方法。乍一看,這很簡單。

data <- read.csv("file.CSV", header=F)
network <- network(data, matrix.type="edgelist", directed=F) #convert data to network object
val<-data[,3] #here are the values for my edges
set.edge.value(network, "val", val, e=1:length(network$mel))

當我要求網絡返回邊緣值(get.edge.values)時,它將返回正確的值。

但是,當我詢問summary(network) ,它只返回一個鄰接矩陣,其中所有值都設置為1(對角線除外)。 即使它們的值為零,它們的值為1。

此外,嘗試獲得度(網絡)之類的東西會返回錯誤的結果。

我一直在尋找這一天。 可能的解決方案是使用network2<-as.matrix.network(netwerk1, matrix.type="adjacency", attrname="val") 這可行。 但是,問題在於,它不再是網絡對象,而成為矩陣類。 結果,我無法將頂點屬性添加到網絡。 再次將network2轉換回網絡對象會失去網絡中的邊值。

一些幫助將不勝感激。

最好的,弗雷德里克

看起來您已經回答了自己的問題:將網絡對象轉換為矩陣時,需要包括attrname參數來告訴as.matrix.network權重使用哪個屬性。 您能解釋一下為什么需要將其轉換回網絡對象嗎?

sna中的degree函數沒有參數來告訴它要使用哪個edge屬性,因此您必須將具有權重的矩陣傳遞給它。

> library(network)
> library(sna)
> net<-network.initialize(3)
> add.edges(net,c(1,2,3),c(2,3,1))
> set.edge.attribute(net,'weight',c(5,6,7))
> as.matrix(net,matrix.type='adjacency',attrname='weight')
  1 2 3
1 0 5 0
2 0 0 6
3 7 0 0
> netmat<-as.matrix(net,matrix.type='adjacency',attrname='weight')
> degree(net)
[1] 2 2 2
> degree(netmat)
[1] 12 11 13

所以就你而言

degree(network2) 

應該管用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM