我有以下資料:
a <- structure(list(ID.x = c(1, 2, 3, 1, 6), ID.y = c(2, 4, 5, 3,
7), var.x = c(55, 82, 32, 94, 55), var.y = c(86, 24, 68, 63,
77)), class = "data.frame", row.names = c(NA, -5L))
> a
ID.x ID.y var.x var.y
1 1 2 55 86
2 2 4 82 24
3 3 5 32 68
4 1 3 94 63
5 6 7 55 77
我需要創建一個變數,以便在給定對的情況下ID,由變數中的共同元素連接的所有對都ID具有相同的代碼。
例如:
- 對 1(1 和 2)的 ID_group = 1
- 第 2 對(2 和 4)與第 1 對有共同點 2,所以它的 ID_pair = 1
- 第 3 對(3 和 5)與第 1 和第 2 對沒有共同元素,但它與第 4 對有 3 共同點(反過來又與第 1 對有共同點 1),所以它應該仍然是 1
- 第 4 對(1 和 3)將是第 1 對,因為它與第 1 和 2 對有一個共同元素
- 第 5 對與任何東西都沒有共同的元素,所以它應該是 2(或其他)
期望的結果是
> a
ID.x ID.y var.x var.y ID_group
1 1 2 55 86 1
2 2 4 82 24 1
3 3 5 32 68 1
4 1 3 94 63 1
5 6 7 55 77 2
一些可能有用的額外說明:
- ID_pair 是分類的(所有 ID 變數也是如此),不需要是連續的,只對每個組都是唯一的。我只是使用數字,因為它必須使用 22k 條目。
- 如果有助于將其概念化,則 ID 代表相關的個人。ID_group 將是他們所屬的識別符號系列。
- 資料不必保持這種配對形式,但它也可以是“長”形式(我需要經常配對/取消配對)。
- R中的解決方案是最好的,但我對獲得它的演算法比對實際編碼更感興趣
預先感謝您的幫助!
uj5u.com熱心網友回復:
單程:
使用 igraph:
library(igraph)
memb <- components(graph_from_data_frame(a))$membership
a$ID_group <- memb[as.character(a$ID.x)]
ID.x ID.y var.x var.y ID_group
1 1 2 55 86 1
2 2 4 82 24 1
3 3 5 32 68 1
4 1 3 94 63 1
5 6 7 55 77 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/427980.html
下一篇:這個回圈的時間復雜度是多少
