zidentyfikować grupy połączonych odcinków, które łączą się ze sobą

Weź tę prostą ramkę danych połączonych identyfikatorów:

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

Teraz chcę zgrupować wszystkie identyfikatory, które łączą. Przez „link” mam na myśli śledzenie łańcucha linków, tak aby wszystkie identyfikatory w jednej grupie były oznaczone razem. Rodzaj struktury rozgałęziającej. to znaczy:

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

Teraz z grubsza znam logikę, jakiej chciałbym, ale nie wiem, jak ją elegancko wdrożyć. Myślę o rekurencyjnym użyciumatch lub%in% iść w dół każdej gałęzi, ale tym razem jestem naprawdę zakłopotany.

Ostatecznym rezultatem, który chciałbym pogonić jest:

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

questionAnswers(3)

yourAnswerToTheQuestion