Я работаю с очень беспорядочными семейными данными, поскольку дети могут быть сгруппированы с несколькими семьями. Данные структурированы следующим образом:
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))
Я хочу определить, какие семьи я могу исключить, исходя из того критерия, что все дети в этой семье сгруппированы вместе в другой, большей семье.
Например, семья A содержит ребенка 1 и ребенка 2. Семья B содержит ребенка 1. Поскольку семья B полностью содержится в семье A, я хочу исключить семью B.
В качестве альтернативы, семейство С содержит Ребенка 3 и Ребенка 4. Семейство D содержит Ребенка 4 и Ребенка 5. Ни одно из семейств не содержится полностью внутри другого, поэтому я пока не хочу отбрасывать ни одно из них.
В моих данных может быть до 6 семей на ребенка и до 8 детей на семью. Там тысячи семей и тысячи детей.
Я попытался решить эту проблему, создав очень широкий data.frame с одной строкой на каждого учащегося, со столбцами для каждой семьи, с которой связан ребенок, каждым родным братом в каждой семье, с которой связан ребенок, и дополнительным столбцом (sibgrp
) для каждая связанная семья, которая объединяет всех братьев и сестер вместе. Но когда я попытался найти отдельных братьев и сестер в объединенной строке, я обнаружил, что не знаю, как это сделать — grepl
не будет принимать вектор в качестве аргумента шаблона.
Затем я начал изучать пересечение и подобные функции, но они сравнивают целые векторы друг с другом, а не наблюдения внутри вектора с другими наблюдениями внутри этого вектора. (Это означает, что я не могу искать пересечения между строкой символов df[1,2]
и строкой символов df[1,3]
. Вместо этого Intersect идентифицирует пересечения между df[2]
и df[3]
).
Я попытался изменить свое мышление, чтобы приспособиться к этому подходу, чтобы я мог сравнивать векторы братьев и сестер друг с другом, предполагая, что я уже знаю, что по крайней мере один брат и сестра являются общими. Я не мог понять, как вообще начать это делать, учитывая, сколько существует разных семей, и сколько из них не связаны друг с другом даже одним общим ребенком.
Что мне здесь не хватает? Был бы очень признателен за любую обратную связь. Благодарю вас!