[R]base::merge() 2つのデータフレームを水平マージする関数




merge(x, y, …)
merge(x, y, by = intersect(names(x), names(y)),      by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,      sort = TRUE, suffixes = c(“.x”,”.y”),      incomparables = NULL, …)


merge()関数を理解するポイントは2つある。(1) 結合キー(結合基準)は何か?(2) 元のデータフレームに存在するものの、相手のデータフレームに存在しない行の扱いをどうするか? 完全にマッチした行のみを残す、左(データフレームx)の全行を残す、右(データフレームy)の全行を残す、左右(データフレームx、y)の全行を残す、のいずれかのオプションがある。

(1) の詳細両者に共通する列名があり、結合キーを明示的に指定しないと、データフレームx,yに共通する列名の集合が自動で使用される。両者に共通する列名があり、明示的に指定したい場合は、by引数を使用する。両者に共通する列名がなく、明示的に指定したい場合、by.x引数でx側の列名、by.y引数でy側の引数を指定する。なお列名を指定する場合、vectorで複数の列名を指定することができる。

(2) の詳細all引数をTRUEとすればx,y全ての行を残す(完全外部結合)。FALSEとすれば双方に共通する行のみが残る。all.xはxの全ての行を残す。左外部結合。all.yはyの全ての行を残す。右外部結合。



x, y data frames, or objects to be coerced to one.

by, by.x, by.y: specifications of the columns used for merging. See ‘Details’.

all: logical; all = L is shorthand for all.x = L and all.y = L, where L is either TRUE or FALSE.

all.x : logical; if TRUE, then extra rows will be added to the output, one for each row in x that has no matching row in y. These rows will have NAs in those columns that are usually filled with values from y. The default is FALSE, so that only rows with data from both x and y are included in the output.

all.y : logical; analogous to all.x.sort : logical. Should the result be sorted on the by columns?

suffixes : a character vector of length 2 specifying the suffixes to be used for making unique the names of columns in the result which are not used for merging (appearing in by etc).

incomparables : values which cannot be matched. See match. This is intended to be used for merging on one column, so these are incomparable values of that column

…. : arguments to be passed to or from methods.