【R】別のデータフレームにある列を条件指定して、dplyr::filter でデータを抽出してぇ
やりたいこと
AとB、2つのデータフレームがあって、Aと Bにはそれぞれ、キー項目がある(例:企業に発番されているユニークな番号の法人番号。他にも人に発番されているマイナンバー、顧客コード など)。
Aのデータには、たくさんのレコードが入っているけど、その中から、Bに格納されてるキー項目のみの情報をAから抽出したい。そんな時に役立つRのコードになります!
例えばこんな時に使えるよ
全国の顧客マスタの中から、手元にある関東地方の顧客のみ抽出したい。
DMを送った先リストの中から、反応があった先のみを抽出したい
コードサンプル
1.データの読み込み
ファイルのパスやデータフレームの読み込み方法は、具体的な状況に合わせて調整してください。個人的には ”fread” が好き。
# データフレームAとデータフレームBを読み込む
dfA <- read.csv("データフレームA.csv")
dfB <- read.csv("データフレームB.csv")
Aのデータフレーム「dfA」と、Bのデータフレーム「dfB」には、共通したユニークなコード(=情報)がある想定。今回のケースでは人のコードとして“マイナンバー”があるとします。
2.情報の抽出
データフレームAの「マイナンバー」列を使用し、データフレームBから情報を抽出する。
# データフレームAの「マイナンバー」列の値を取得
people_number <- c(dfA$マイナンバー)
# データフレームBから条件に合致する行を抽出
extracted_info <- dfB %>% dplyr::filter(マイナンバー %in% people_number)
以上になります。実際は、項目名にダブルバイトの日本語を使うことはナンセンスと思いますが、わかりやすさ優先ですみません。
番外編
ちなみに、以下でもできます。
# データフレームAの「マイナンバー」列の値を取得
people_number <- dfA$マイナンバー
# データフレームBから条件に合致する行を抽出
extracted_info <- dfB[dfB$マイナンバー %in% people_number, ]
お好きな方でお試しください。私は dplyr 信者。なぜかって?
かっこいいから!!