Nehmen Sie diese einfachen Datenrahmen verknüpft ids:identifizieren Gruppen von verknüpften Episoden, die zusammen ketten
test <- data.frame(id1=c(10,10,1,1,24,8),id2=c(1,36,24,45,300,11))
> test
id1 id2
1 10 1
2 10 36
3 1 24
4 1 45
5 24 300
6 8 11
ich jetzt zusammenfassen möchten alle IDs, welche Verbindung. Mit 'Link', ich meine, folgen Sie durch die Kette von Links, so dass alle IDs in einer Gruppe zusammen bezeichnet werden. Eine Art Verzweigungsstruktur. d. h .:
Group 1
10 --> 1, 1 --> (24,45)
24 --> 300
300 --> NULL
45 --> NULL
10 --> 36, 36 --> NULL,
Final group members: 10,1,24,36,45,300
Group 2
8 --> 11
11 --> NULL
Final group members: 8,11
Jetzt weiß ich ungefähr die Logik, die ich möchte, aber weiß nicht, wie ich es elegant implementieren würde. Ich denke an eine rekursive Verwendung von match
oder %in%
, um jeden Zweig zu gehen, aber bin dieses Mal wirklich ratlos.
Das Endergebnis I jagen würde, ist:
result <- data.frame(group=c(1,1,1,1,1,1,2,2),id=c(10,1,24,36,45,300,8,11))
> result
group id
1 1 10
2 1 1
3 1 24
4 1 36
5 1 45
6 1 300
7 2 8
8 2 11
Ich wünschte SO und diese Frage war vor 25 Jahren verfügbar, als ich meinen Kopf gegen die Wand schlug, mit SAS, der versuchte, diese Frage zu lösen. –
@bondeddust - zufällig entstand diese Frage als Ergebnis des Versuchs, ein hässliches und ineffizientes Stück SAS-Code zu ersetzen, der etwas Ähnliches tat. – thelatemail