r - 如何提取相互关联的 ID?
问题描述
我有两列 id1 和 id2 具有相互关联的 id 列表。我正在寻找 R 中的解决方案,可以根据它们的关系将这些 id 拉到一起。基本思想是 id 的 313-320 都是相互链接的,例如 313 链接到 314(第 1 行),因为 314 链接到 316(第 7 行)所以 313 和 316 也链接等等。解决方案必须以某种方式探索这些联系并将它们放在一个链中,这样 313-320 将在一个链中,321-328 将在第二个链中。
id1<-c(313,313,313,313,313,314,314,314,314,315,317,317,317,318,318,319,321,321,321,321,321,321,321,322,322,322,322,322, 322,323,323,323,323,323,324,324,324,324,325,325,325,326,326,327)
id2<-c(314,315,316,319,320,315,316,319,320,316,318,319,320,319,320,320,322,323,324,325,326,327,328,323,324,325,326,327, 328,324,325,326,327,328,325,326,327,328,326,327,328,327,328,328)
df<-cbind.data.frame(id1, id2)
> df
id1 id2
1 313 314
2 313 315
3 313 316
4 313 319
5 313 320
6 314 315
7 314 316
8 314 319
9 314 320
10 315 316
11 317 318
12 317 319
13 317 320
14 318 319
15 318 320
16 319 320
17 321 322
18 321 323
19 321 324
20 321 325
21 321 326
22 321 327
23 321 328
24 322 323
25 322 324
26 322 325
27 322 326
28 322 327
29 322 328
30 323 324
31 323 325
32 323 326
33 323 327
34 323 328
35 324 325
36 324 326
37 324 327
38 324 328
39 325 326
40 325 327
41 325 328
42 326 327
43 326 328
44 327 328
解决方案
正如@r2evans 所指出的,这个问题可以通过igraph
库来解决:
clusters(graph_from_data_frame(df, directed = FALSE))
$membership
313 314 315 317 318 319 321 322 323 324 325 326 327 316 320 328
1 1 1 1 1 1 2 2 2 2 2 2 2 1 1 2
$csize
[1] 8 8
$no
[1] 2
推荐阅读
- php - php - 基于范围键返回数组
- kubernetes - 将 2 个不同的 statefulSet 连接到同一个 PV
- architecture - 在 DDD 的上下文中应该如何处理事务
- ruby-on-rails - 更新具有相同图像的模型时出现 ActiveSupport::MessageVerifier::InvalidSignature 错误
- git - 在 Git 中将分支从主分支移动到另一个分支
- c# - 用 C# 编写其他语言时的输入问题
- android - OpenTok 库的视频质量问题
- python - Django ManyToMany 字段给出 IntegrityError
- javascript - 使用 JavaScript 创建包含可编辑字段的 PDF
- r - 使用带有 processmapR 的neato 布局控制边缘