gpt4 book ai didi

R基于重叠/相交的行创建一个集群

转载 作者:行者123 更新时间:2023-12-01 23:43:57 24 4
gpt4 key购买 nike

我在 R 中有以下数据框,在 a_sno 和 b_sno 两列中有重叠数据

a_sno<- c(4,5,5,6,6,7,9,9,10,10,10,11,13,13,13,14,14,15,21,21,21,22,23,23,24,25,183,184,185,185,200)
b_sno<-c(5,4,6,5,7,6,10,13,9,13,14,15,9,10,14,10,13,11,22,23,24,21,21,25,21,23,185,185,183,184,200)
df = data.frame(a_sno, b_sno)

如果仔细查看数据,您会发现 4、5、6 和 7 相交/重叠,我需要将它们放入名为 1 的组中。就像明智的 9、10、13、14 进入第 2 组、11 和 15 进入第 3 组等....并且 200 不与任何其他行相交,但仍需要为其分配自己的组。

结果输出应该是这样的:

---------
group|sno
---------
1 | 4
1 | 5
1 | 6
1 | 7
2 | 9
2 | 10
2 | 13
2 | 14
3 | 11
3 | 15
4 | 21
4 | 22
4 | 23
4 | 24
4 | 25
5 | 183
5 | 184
5 | 185
6 | 200

非常感谢为完成这项工作提供的任何帮助。谢谢

最佳答案

可能不是最有效的解决方案,但您可以使用图表来做到这一点:

#sort the data by row and remove duplicates
df = unique(t(apply(df,1,sort)))

#load the library
library(igraph)

#make a graph with your data
graph <-graph.data.frame(df)

#decompose it into components
components <- decompose.graph(graph)

#get the vertices of the subgraphs
result<-lapply(seq_along(components),function(i){
vertex<-as.numeric(V(components[[i]])$name)
cbind(rep(i,length(vertex)),vertex)
})

#make the final dataframe
output<-as.data.frame(do.call(rbind,result))
colnames(output)<-c("group","sno")
output

关于R基于重叠/相交的行创建一个集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30057862/

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