1 回答

TA貢獻1831條經驗 獲得超9個贊
如果您將此視為圖形問題,則可以執行以下操作:
library(igraph)
g <- make_empty_graph(directed = FALSE, n = nrow(tab))
for (loan_id in unique(tab$loan)) {
loan_idx = which(tab$loan == loan_id)
if (length(loan_idx) >= 2) {
g <- g + path(loan_idx)
}
}
for (collateral_id in unique(tab$collateral)) {
collateral_idx = which(tab$collateral == collateral_id)
if (length(collateral_idx) >= 2) {
g <- g + path(collateral_idx)
}
}
tab$grouping = components(g)$membership
即,您制作一個圖表并在具有匹配貸款或抵押品 ID 的任何行之間添加邊。我不確定這是如何優化的,因為forR 中的循環很少是正確的答案。
輸出與您的預期輸出匹配:
> tab
loan collateral loan_group collateral_group final grouping
1 L1 C1 1 1 1 1
2 L2 C1 2 1 1 1
3 L5 C8 3 2 2 2
4 L2 C4 2 3 1 1
5 L6 C8 4 2 2 2
6 L7 C9 5 4 3 3
7 L8 C4 6 3 1 1
添加回答
舉報