prendere questa semplice cornice di dati di ID connessi:identificare gruppi di episodi legati a catena, che insieme
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
Ora voglio raggruppare tutti gli ID che collegano. Tramite "collegamento", intendo seguire la catena di collegamenti in modo che tutti gli identificativi di un gruppo siano etichettati insieme. Una specie di struttura ramificata. cioè:
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
Ora ho più o meno conoscere la logica che vorrei, ma non so come avrei implementarlo con eleganza. Sto pensando a un uso ricorsivo di match
o %in%
per andare giù per ogni ramo, ma sono davvero stumped questa volta.
Il risultato finale sarei inseguendo è:
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
Vorrei tanto e questa domanda era stata disponibile 25 anni fa quando stavo sbattendo la testa contro il muro con SAS cercando di risolvere questa domanda. –
@bondeddust - per coincidenza questa domanda è sorto come risultato del tentativo di sostituire un pezzo di codice SAS brutto e inefficiente che ha fatto qualcosa di simile. – thelatemail