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
添加回答
举报