더북(TheBook)

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에 해당한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.