관련글
1. 들어가며
두 개의 데이터프레임을 결합해야하는 일은 데이터 분석 과정에서 매우 흔하게 발생하는 일이다. 이 작업 역시 R의 기본 함수로 가능하지만, dplyr 패키지를 이용하는 것이 훨씬 편리하다.
2. 데이터 단순 결합
<그림 1>은 별개의 데이터 프레임 결합하는 방법이다. 데이터의 행을 더 늘이는 경우에는 rbind 함수를 이용하며 이때 A, B 데이터의 열 수는 동일해야 한다. 반면 데이터의 열을 더 늘이는 경우는 cbind를 이용하는데 A, B 데이터의 행 수가 동일해야 한다.
3. 두 개의 다른 데이터 결합
실제 데이터 분석 업무에서는 <그림 2>와 같이 공통된 열(변수)을 기준으로 두 개의 다른 데이터를 결합해야 할 때가 더 많다. 예를 들어 주민등록번호와 연소득 정보를 갖고 있는 A 데이터와 , 주민등록번호와 나이 정보를 갖고 있는 B 데이터가 있다면 주민등록번호 변수를 기준으로 연소득과 나이를 각각 대응시킨 새로운 데이터를 만들 수 있다. 이러한 데이터 결합 방법을 보통 조인(join)한다고 한다.
<그림 2>에서는 두 데이터의 주민등록번호 변수는 정렬 순서만 다를 뿐 완벽하게 일치한다. 그러나 실제 상황에서는 두 데이터가 일치하지 않는 경우가 거의 대부분이다. 이런 상황에서 보통 원하는 결과물은 네 가지 종류가 있다.
1) 공통 데이터만 결합(inner_join)
A, B 두 데이터가 일치하지 않을 경우, 기준 변수에서 공통 값이 있는 케이스만 결합의 결과로 얻는 경우이다. 그림을 보면 두 데이터의 주민등록번호 변수에서 공통으로 존재하는 1, 2, 4, 6번의 데이터만 결합된 것을 볼 수 있다. 집합으로 치면 일종의 교집합 개념이다.
2) 모두 결합(full_join)
A, B 양쪽 데이터의 모든 값을 결합하고 해당 변수에 값이 없는 경우 NA(Not Aplicable)기호로 결측값으로 표시된다. 집합의 개념이라면 합집합이다.
3) 한 쪽을 기준으로 결합(left_join)
A, B 양쪽 데이터 중 어느 한쪽을 기준으로 결합하는 방법이다. 그림처럼 A데이터를 왼쪽에 놓고 왼쪽 데이터를 기준으로 두 데이터를 결합하면 A 데이터의 모든 데이터는 포함하고, A 데이터에는 있지만 B 데이터에 없는 주민등록번호의 경우 나이 변수 값은 결측값으로 표시된다. 오른쪽을 기준으로 하는 right_join 함수도 있지만, left_join 함수를 쓰고 A, B 데이터의 위치만 바꿔 놓으면 같은 결과를 얻는다. 즉 left_join(A, B, by=”주민등록번호”)와 right_join(B, A, by=”주민등록번호”)의 결과는 동일하다.
4)한 쪽에만 있는 데이터로 결합(anti_join)
가끔은 A, B 양쪽 데이터 중 어느 한쪽에만 있는 데이터를 골라내야 하는 경우가 있다. 이때 유용하게 쓸 수 있는 것이 anti_join 함수이다. 그림에서 처럼 이 함수를 실행하면 주민등록변수를 기준으로 A데이터 중 B데이터와 겹치는 부분은 제외되고 나머지 데이터만 남게 된다. 집합으로 비유하자면 차집합과 같다.
관련글
'R_데이터 분석 기술' 카테고리의 다른 글
R 다중공선성 VIF 값 계산 (0) | 2022.04.04 |
---|---|
wide & long 데이터 형태 전환 (0) | 2022.04.04 |
R을 이용해 상관계수 구하기 (0) | 2022.04.01 |
변수별 부분 집계 by dplyr (0) | 2022.03.31 |
R 전처리 최강자 dplyr 패키지 (0) | 2022.03.31 |
R_요인분석(psych 패키지) (0) | 2022.03.03 |
범주별 다변수 통계량 계산(by 함수) (0) | 2022.03.03 |
댓글