gpt4 book ai didi

r - 根据度数排序节点并使用 igraph 在 R 中操作

转载 作者:行者123 更新时间:2023-12-04 23:32:13 29 4
gpt4 key购买 nike

我正在使用的数据集显示节点之间的链接。例如:

> 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

我的目标是用dSorted中节点对应的顺序替换ln1中的节点。例如,10000应该替换为3,因为dSorted中10000在第三个索引中。同样4725应该替换为1,因为它排在第一个dSorted.I 尝试了以下代码:
> 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 很陌生。如果有人好心地向我展示一条路径,我真的很感激。

最佳答案

如果我理解正确,你可以这样做:

ln1 <- order(order(deg, decreasing=T))
# [1] 3 1 4 5 6 2 7

# if you want names
names(ln1) <- names(deg)
# 10000 4725 5725 1725 6805 3250 7673
# 3 1 4 5 6 2 7

如上所述,10000 的值为 3,因为它是顺序中的第三个 4725 的值是 1,因为它是顺序中的第一个,依此类推。

方式 sortorder相关: sort默认对你的向量进行排序, order返回对向量进行排序的索引。

为什么双- order ?它们是彼此的倒数。
sorted <- sort(deg)
deg[order(deg)] == sorted
sorted[order(order(deg))] == deg
order(deg)会安排您的 未分类 deg以便它是有序的。 order(order(deg))会安排您的 已排序 deg所以它类似于原始订单。用词混淆,但玩弄它,你会看到。

关于r - 根据度数排序节点并使用 igraph 在 R 中操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31468718/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com