我正在使用的数据集显示节点之间的链接。例如:
> data2
V1 V2
1 10000 4725
2 4725 6805
3 4725 3250
4 5725 3250
5 1725 7673
(例如使用一个小的数据框)。这里的数据框表示节点 10000 和 4725 之间存在无向链接,节点 4725 和 6805 之间存在链接等等。使用 igraph 包,我正在获得各个节点的度数:
g<-graph.data.frame(data2, directed=F)
deg <- igraph::degree(g)
> deg
10000 4725 5725 1725 6805 3250 7673
1 3 1 1 1 2 1
接下来,我根据节点的度数按降序对节点进行排序:
> dSorted <-sort.int(deg,decreasing=TRUE,index.return=FALSE)
> dSorted
4725 3250 10000 5725 1725 6805 7673
3 2 1 1 1 1 1
取数据框的第一列:
> ln1 <- data2[,1]
> ln1
[1] 10000 4725 4725 5725 1725
我的目标是将ln1中的节点替换为dSorted中节点的对应顺序。例如,10000应该替换为3,因为在dSorted中,10000位于第3个索引。同样4725应该替换为1,因为它排在第一位dSorted。我尝试了以下代码:
> for(i in 1:length(deg)){ln1[which(ln1==dSorted[i])]<-i}
但它不起作用。ln1 保持不变。我想到在 dSorted 中,节点号被视为索引。所以我也尝试了以下代码(dSorted 返回索引向量):
> dSorted <- sort.int(deg,decreasing=TRUE,index.return=TRUE)
> for(i in 1:length(deg)){ln1[which(ln1==dSorted$ix[i])]<-i}
但是 ln1 仍然保持不变。我对 R 很陌生。如果有人在这里给我指路,我将不胜感激。