私は非常に乱雑な家族データを扱っています。子供たちを複数の家族でグループ化することが可能です。次のようにデータが構成されています2つのベクトルの情報に基づいて重なり合うグループの相対的なサイズを特定する
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))
私は、その家族の中で子供たちのすべてが別にグループ化された基準に基づいて、より大きな、家族をドロップすることができた家族を識別します。例えば
ファミリーBが完全ファミリーA内に含まれているので、家族Aは、子供1と子供2ファミリーBを含有するキッド1含まれ、Iは、あるいは家族B.
をドロップする、ファミリーCは、キッド3含有家族のDにはKid 4とKid 5が含まれています。どちらの家族も完全に他の家族に含まれていないので、当分の間はどちらも落ちたくありません。
私のデータには、子供1人あたり最大6家族、家族あたり最大8人の子供がいることがあります。何千もの家族と何千人もの子供たちがいます。
私は子供1人1列、子供が関連する各家族の列、子供が関連付けられている各家族の各兄弟、追加の列を持つ非常に幅広いdata.frameを作成することでこれを解決しようとしました(sibgrp
)を使用して、すべての兄弟を連結します。しかし、連結された文字列内の個々の兄弟を検索しようとしたとき、私はこれを行う方法がわかりませんでした。grepl
はパターン引数としてベクトルをとらないでしょう。
その後、交差や類似の機能を調べ始めましたが、ベクトル内の他の観測値に対する観測値ではなく、ベクトル全体を比較します。 (意味 - 文字列df[1,2]
と文字列df[1,3]
の間の交差点を見つけることができません。代わりに、df[2]
とdf[3]
の間の交差を識別します)。
このアプローチに対応するために私の思考を変えようとしました。少なくとも1つの兄弟が共有されていることを既に知っていると仮定して、兄弟のベクトルを互いに比較することができました。私はこれをやっても、どれくらいの種類の家族があるか、どれくらいの人が共通の子供でも互いに関係していない場合、どのようにして始めるかを理解できませんでした。
私はここで何が欠けていますか?フィードバックをいただければ幸いです。ありがとうございました!
詳細を教えてください。 –
@VincentBonhommeそれは私が何を求めていたのです。 –
ありがとう、@KunalPuri。私は週末の仕事を中止していますが、明日最初にこれを試してみます。それは非常にエレガントなソリューションのように見えますが、私はその内部の仕組みを完全に理解していないことを認めなければなりません。 – szw