У меня есть 2 столбца ID, которые создаются / собираются независимо. Я пытаюсь объединить эти два столбца идентификаторов в один, определяя, какие строки являются частью одной и той же связанной группы идентификаторов на основе любого из двух столбцов идентификаторов. Я бы посчитал строки связанными, основываясь на нескольких правилах:
1: Если у LOAN одинаковое значение в нескольких строках, они принадлежат одной и той же группе (в примере только для справки.) I ' мы назвали это loan_group. Здесь нет проблем.
2: Если COLLATERAL имеет одинаковое значение в нескольких строках, они принадлежат временной группе. Я назвал это collabo_group (то же правило, что и # 1). Здесь нет проблем.
3: Наконец, и я не уверен, как точно сформулировать это, но в любое время есть совпадения между значениями, которые входящие в одну и ту же группу (по столбцам ссуды и обеспечения), эти группы следует дополнительно консолидировать. Например:
df <- data.frame('LOAN' = c('L1', 'L2', 'L5', 'L2', 'L6', 'L7', 'L8'),
'COLLATERAL' = c('C1', 'C1', 'C8', 'C4', 'C8', 'C9', 'C4'))
df$laon_group <- as.numeric(factor(df$LOAN))
df$collateral_group <- as.numeric(factor(df$COLLATERAL))
df$final_grouping <- NA
LOAN COLLATERAL loan_group collateral_group final_grouping
---- ----------- ---------- ---------------- --------------
L1 C1* 1 1 **1**
L2** C1* 2 1 **1**
L5 C8 3 2 2
L2** C4*** 2 3 **1**
L6 C8 4 2 2
L7 C9 5 4 3
L8 C4*** 6 3 **1**
*, поскольку строки 1 и 2 имеют значение C1, они будут назначены в одну и ту же конечную группу
**, поскольку строка 2 имеет LOAN значение L2, это означает, что мы можем присвоить строке 4 окончательную группировку '1', потому что эта строка может быть связана обратно со строкой 1 через ссылку L2 / C1
*** наконец, потому что строка 4 включает в себя COLLATERAL значение C4, это означает, что мы можем включить строку 7 в консолидированную окончательную группировку. Эта строка может быть связана с первой строкой через ссылки L2 / C4 & L2 / C1
Набор данных составляет примерно 15 м уникальных комбинаций LOAN + COLLATERAL. В некоторых крайних случаях группы, вероятно, будут пересекать несколько тысяч (возможно, +10 тысяч) идентификаторов. Я столкнулся с некоторыми проблемами с ресурсами при тестировании BQ некоторых решений, включая предложения из моего первоначального вопроса , поэтому я хотел бы попытаться сделать это в R / Python вместо