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

 

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

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

 

완전 대응

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

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

인수(Arguments) :

 

Example :

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

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

 

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

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

결과 :

 

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

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

 

결과 :

 

결과 :

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

 

부분 대응

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

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

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

결과 :

img

결과 :

 

결과 :

 

결과 :

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