首页 > 解决方案 > 如何提取相互关联的 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

标签: rlinkage

解决方案


正如@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

推荐阅读