4.外部結合-SQL経験者のためのR入門

SQLの外部結合 (Outer Join)、特に LEFT OUTER JOIN に対応するR言語の書き方を解説します。

R言語では、主に dplyr パッケージの left_join() 関数を使用して、この操作を実行します。


🤝 外部結合 (LEFT OUTER JOIN) の対応

SQLの LEFT OUTER JOIN は、左側のテーブル(TABLE1)のすべての行を保持し、結合キーが一致する右側のテーブル(TABLE2)の行を結合します。一致する行が右側のテーブルにない場合でも、左側の行は保持され、右側の列には欠損値 (NULL に相当) が入ります。

R言語の dplyr パッケージでは、left_join() 関数がこの役割を果たします。

SQL構文R言語 (dplyr)説明
SELECT * FROM TABLE1 LEFT OUTER JOIN TABLE2 ON T1.KEY = T2.KEYTABLE1 %>% left_join(TABLE2, by = "KEY")左側のデータフレーム (TABLE1) の全行を保持し、KEY 列で右側のデータフレーム (TABLE2) を結合します。

1. R言語での基本的な書き方

SQLの例題に基づき、TABLE1 を左、TABLE2 を右として結合します。

R

# SQL: SELECT * FROM TABLE1 LEFT OUTER JOIN TABLE2 ON TABLE1.KEY = TABLE2.KEY

# R言語:
library(dplyr)

# TABLE1を左側のデータフレームとして開始
TABLE1 %>%
  left_join(
    TABLE2,         # 右側のデータフレームを指定
    by = "KEY"      # 結合キー(ON句)を指定
  )

2. キー名が左右で異なる場合の対応

SQLで ON T1.KEY1 = T2.KEY2 のように、結合キーの列名が左右で異なる場合にも対応できます。

SQLのON句R言語の by 引数
ON T1.ID = T2.ReferenceIDby = c("ID" = "ReferenceID")

コード例(キー名が異なる場合)

R

# SQL: SELECT * FROM Employees LEFT JOIN Departments ON Employees.DeptID = Departments.ID

# R言語:
Employees %>%
  left_join(
    Departments,
    by = c("DeptID" = "ID") # 左の"DeptID"と右の"ID"で結合する
  )

💡 その他の結合(JOIN)の対応

R言語の dplyr では、他のSQLの結合タイプにも直感的に対応する関数が用意されています。

SQLの結合タイプR言語 (dplyr 関数)説明
INNER JOINinner_join()両方のテーブルにキーが一致する行のみを保持します。
RIGHT OUTER JOINright_join()右側のテーブルの全行を保持し、一致しない左側の列は NA になります。
FULL OUTER JOINfull_join()両方のテーブルの全行を保持し、一致しないセルは NA になります。
CROSS JOINcross_join()全ての組み合わせを生成します(by 引数不要)。

これで、SQLの外部結合(LEFT OUTER JOIN)に対応するR言語の書き方を理解いただけたと思います。