데이터 프레임 결합: 완전(Full) & 부분(Partial) 대응

 

종종, 우리는 여러 출처로부터 데이터를 얻는다. 분석을 수행하려면 하나 이상의 공통 키 변수를 갖는 두 개의 데이터 프레임을 함께 결합해야 한다.

이 튜토리얼에서 다음의 내용을 학습한다 :

 

완전 대응

완전 대응(full match)은 오른 쪽 테이블에 상대편이 있는 값을 반환한다. 대응하지 않는 값들은 새 데이터 프레임에 반환되지 않는다. 그러나 부분 대응은 NA로 결측치를 반환한다.

우리는 간단한 inner join(내부 결합)을 살펴볼 것이다. 내부 결합 키워드는 두 표에 일치하는 값을 가진 레코드(행)를 선택한다. 두 데이터셋을 결합하려면 merge() 함수를 사용한다. 이 함수는 다음과 같은 세 가지 인수를 사용할 것이다.

인수(Arguments) :

 

Example :

다음의 변수를 갖는 첫 데이터 프레임을 생성.

다음의 변수를 갖는 둘째 데이터 세트를 생성.

 

공통의 key 변수는 surname이다. 우리는 두 데이터를 합쳐서, 차원이 7x3인지 확인할 수 있다.

우리는 R이 문자열이 factor로 변환되는 것을 원치않기 때문에(즉, 변수를 문자로 처리하기 위해) 데이터 프레임에 StringsAsFactors=FALSE를 추가한다.

결과 :

 

공통의 key 변수가 서로 다른 이름을 가지고 있을 경우에 데이터 프레임들을 병합해 보자.

우리는 movies 데이터 프레임에서 surname을 name으로 바꾼다. 우리는 identical(x1, x2) 함수를 사용하여 두 데이터 프레임이 동일한지 확인한다.

 

결과 :

 

결과 :

이는 열 이름이 다르더라도 병합 작업이 수행됨을 보여준다.

 

부분 대응

두 데이터 프레임이 동일한 공통 key 변수를 가지고 있지 않다는 것은 놀라운 일이 아니다. 완전 대응(full matching)에서 데이터프레임은 x와 y 데이터 프레임 모두에서 발견되는 행만 반환한다. 부분 병합(partial merging)을 사용하면 다른 데이터 프레임에 대응하는 행이 없는 행을 유지할 수 있다. 이러한 행은 대개 y 값들로 채워진 열에 NA를 가진다. 우리는 all.x=TRUE라고 설정함으로써 그렇게 할 수 있다.

예를 들어, movies데이터 프레임에 영화 참조가 없는 producer데이터 프레임에 새로운 프로듀서로 Lucas를 추가할 수 있다. 만일 all.x = FALSE로 설정하면, R은 두 데이터 세트의 일치 값만 결합한다. 우리의 경우, producer Lucas는 하나의 데이터 세트에서 누락되었기 때문에 합병에 참여하지 않을 것이다.

all.x=TRUE를 지정할 때와 그렇지 않을 때 각 결과의 차원을 살펴보자.

결과 :

img

결과 :

 

결과 :

 

결과 :

우리가 볼 수 있듯이, 새로 데이터 프레임 m3의 차원은 8x3인데, m1과 m2의 차원 7x3과 대조된다. R은 books 데이터 프레임에서 저자 명이 누락된 부분에 대해서는 NA가 입력된다.