Я пытаюсь найти способ создания последовательных Group_ID на основе «перекрывающихся» переменных. Самый простой способ описать это - использовать пример дома, кредита и заемщика.Рекурсивная группировка в R
Предположим, мы имеем следующий пример
df <- data.frame(house = c('H_01','H_02','H_03','H_04','H_05'),
loan = c('L_01','L_02','L_02','L_03','L_04'),
borrower = c('B_01','B_01','B_02','B_03','B_04'))
Предположим, что один будет иметь отношения многие ко многим между всеми переменными (дом, кредит, заемщик) Так, например, дом 1 (H_01
) связан с Кредит 1 (L_01
) и Заемщик 1 (B_01
). Но B_01
также связан с L_02
, который сам связан с H_02
, но также связан с H_03
- поэтому первые 3 строки в моей таблице должны быть помечены G_01
(для группы 1).
H_04
связан с L_03
, который не принадлежит ни к одной другой записи, и ни делает B_03
связаны с какой-либо другой записи, так что четвёртая запись должна быть в G_02
. И с аналоговой разведкой, мы должны видеть, что запись 5 принадлежит в своей подгруппе G_03
Есть ли способ элегантно иметь dplyr
(предпочтительно, но не обязательно) достижения этой группировки G_01
, G_02
и G_03
?
Не моя форте, но звучит как сети/igraph. – alistaire
Для этого простого примера базовый R-код 'cumsum (pmin (c (1, diff (df $ loan)), c (1, diff (df $ заемщик))))' будет вычислять группы. Однако это не будет работать в целом, если, например, у раннего заемщика есть несколько займов и обменивается этими кредитами с несколькими заемщиками, рано или поздно. – lmo