Ich arbeite mit sehr unordentlichen Familiendaten, in denen es möglich ist, dass Kinder mit mehreren Familien gruppiert werden. Die Daten ist wie folgt strukturiert:Identifizieren der relativen Größe von überlappenden Gruppen basierend auf Informationen in 2 Vektoren
famid <- c("A","A","B","C","C","D","D")
kidid <- c("1","2","1","3","4","4","5")
df <- as.data.frame(cbind(famid, kidid))
ich identifizieren wollen, die Familien, die ich fallen kann, auf der Grundlage der Kriterien, die alle Kinder in dieser Familie zusammen gruppiert sind in eine andere, größere, Familie.
Zum Beispiel Familie A enthält Kid 1 und Kid 2. Familie B enthält Kid 1. Weil Familie B vollständig innerhalb Familie A enthalten ist, möchte ich 3 Familie B.
Alternativ fallen, Familie C enthält Kid und Kid 4. Familie D enthält Kid 4 und Kid 5. Keine Familie ist vollständig in der anderen enthalten, so dass ich auch nicht vorläufig fallen lassen möchte.
In meinen Daten kann es bis zu 6 Familien pro Kind und bis zu 8 Kinder pro Familie geben. Es gibt Tausende von Familien und Tausende von Kindern.
Ich habe versucht, dies zu adressieren, indem ich eine sehr breite data.frame mit einer Zeile pro Schüler mit Spalten für jede Familie, der das Kind zugeordnet ist, jedes Geschwister in jeder Familie, die das Kind zugeordnet ist, und eine zusätzliche Spalte erstellt (sibgrp
) für jede zugeordnete Familie, die alle Geschwister miteinander verkettet. Aber als ich versuchte, nach einzelnen Geschwistern innerhalb der verketteten Zeichenfolge zu suchen, fand ich, dass ich nicht wusste, wie man das macht - grepl
wird keinen Vektor als das Musterargument nehmen.
Ich begann dann, Schnittpunkt und ähnliche Funktionen zu untersuchen, aber diese vergleichen ganze Vektoren miteinander, nicht Beobachtungen innerhalb eines Vektors zu anderen Beobachtungen innerhalb dieses Vektors. (Bedeutung - Ich kann nicht nach den Schnittpunkten zwischen der Zeichenkette df[1,2]
und der Zeichenkette df[1,3]
suchen. Intersect identifiziert stattdessen die Schnittpunkte zwischen df[2]
und df[3]
).
Ich versuchte, mein Denken zu ändern, um diesen Ansatz zu berücksichtigen, so dass ich Vektoren von Geschwistern miteinander vergleichen konnte, vorausgesetzt, dass ich bereits weiß, dass mindestens ein Geschwister geteilt wird. Ich konnte nicht herausfinden, wie ich überhaupt damit anfangen sollte, wenn man bedenkt, wie viele verschiedene Familien es gibt und wie viele von einem einzigen Kind nicht miteinander verwandt sind.
Was fehlt mir hier? Ich würde jedes Feedback sehr schätzen. Vielen Dank!
Können Sie bitte Ihre Lösung detailliert beschreiben? –
@VincentBonhomme Das war es, was ich tun wollte. –
Danke, @Kunalpuri. Ich bin am Wochenende frei, werde es aber morgen als erstes ausprobieren. Es sieht wie eine sehr elegante Lösung aus, obwohl ich zugeben muss, dass ich seine inneren Abläufe nicht völlig verstehe. – szw