merge( )는 cbind( )와는 다르다. 앞의 코드는 두 개의 데이터 프레임을 합칠 때 공통되는 컬럼인 name을 기준으로 데이터를 합치지만 cbind( )는 다음에 보인 것처럼 단순히 컬럼을 합칠 뿐이다.
> x <- data.frame(name=c("a", "b", "c"), math=c(1, 2, 3)) > y <- data.frame(name=c("c", "b", "a"), english=c(4, 5, 6)) > cbind(x, y) name math name english 1 a 1 c 4 2 b 2 b 5 3 c 3 a 6
merge( ) 수행 시 공통된 값이 한쪽에만 있는 경우에는 반대편 데이터가 비게 되고 이 경우 해당 행은 병합 결과에서 빠진다. 그러나 이 경우에도 데이터가 비어 있는 쪽의 값을 NA로 채우면서 전체 데이터를 모두 병합하고 싶다면 all 인자에 TRUE를 지정한다.8
다음에 all=FALSE(기본값)인 경우와 all=TRUE인 경우의 비교를 보였다. all=FALSE인 경우 공통된 name이 양측에 포함된 “a”, “b”만 결과에 나타나며, all=TRUE인 경우 공통된 값이 없는 쪽에 NA가 채워지면서 x, y의 전체 행이 결과에 포함된다.
> x <- data.frame(name=c("a", "b", "c"), + math=c(1, 2, 3)) > y <- data.frame(name=c("a", "b", "d"), + english=c(4, 5, 6)) > merge(x, y) name math english 1 a 1 4 2 b 2 5 > merge(x, y, all=TRUE) name math english 1 a 1 4 2 b 2 5 3 c 3 NA 4 d NA 6
8 데이터베이스에서 사용하는 Full Outer Join에 해당한다.