데이터 분석/R 데이터 처리 & 분석

[R 데이터분석] 조인(join) 을 이용하여 데이터 병합하기(inner join, full join, left join, right join)

love R 2020. 1. 20. 04:01
반응형

join 을 활용한 데이터 병합하기

 

데이터 병합에 대한 내용을 알아보겠습니다. 이전에 cbind 함수를 통해 데이터 병합에 대한 내용을 다룬 적이 있었죠. cbind는 테이블과 테이블을 바로 옆에 붙이는 역할이었는데요. 데이터 병합 시에 cbind보다는 join 방법을 많이 씁니다. join은 키(key)를 기준으로 데이터를 병합하는 역할인데요. cbind는 키를 고려하지 않고 행의 수가 반드시 같아야 합니다. Join 을 알아보기 위해 아래의 예시를 보도록 하겠습니다.

 

 

 

위와 같이 각 테이블별로 이름이 있고 수학점수와 영어점수가 따로 나뉘어져 있습니다. 그런데 각 테이블을 병합하여 한 번에 보고 싶을 수도 있겠죠?  이 때 join 방법을 쓰는데 몇 가지 종류가 있습니다.

 

  1. inner join
  2. full outer join
  3. left join
  4. right join

 

 

예시로 수학점수와 영어점수 테이블을 만들어 각 join을 수행해보겠습니다.

먼저 각 테이블을 만듭니다. test1 은 수학점수 테이블, test2 은 영어점수 테이블로 생성합니다.

test1 <- data.frame(name=c('서현','민아','유진','다미'), math = c(75, 85,90,70),stringsAsFactors=FALSE)
test2 <- data.frame(name = c('규리','서현','민아','유진','민경'),english = c(80,90,95,70,85),stringsAsFactors=FALSE)

 

join 하기위해 dplyr 패키지에 있는 join함수를 이용하도록 합니다. dplyr 패키지가 설치되어 있지 않다면 install.packages(“dplyr”) 를 이용해 설치하고 library(dplyr) 명령어로 dplyr 패키지를 불러옵니다.

# dplyr 패키지가 설치되어 있지 않은 경우
# install.packages('dplyr') 
library(dplyr) 

join은 키(key)를 기준으로 병합합니다. 두 테이블에 ’name’이라는 열이 있습니다. 이때 name을 기준으로 병합합니다.

 

 

1. inner join
inner join은 키(key)를 기준으로 두 테이블에 같이 존재하는 데이터를 추출합니다. 여기에서는 이름(key)을 기준으로 보면 두 테이블에 서현,민아, 유진이가 있네요. ’name’을 기준으로 join하기 위해 by 인자에는 ’name’을 쓰도록 합니다. inner join은 집합에서 교집합의 개념과 동일합니다. dplyr패키지에서 inner_join 함수를 사용합니다.

inner_join(test1,test2,by='name')
  name math english
1 서현   75      90
2 민아   85      95
3 유진   90      70

 

 

2. full (outer) join
full join은 키(key)를 기준으로 두 테이블에 존재하는 모든 데이터를 뽑아내어 병합합니다. 여기에서는 이름(key)을 기준으로 보면 두 테이블에 서현, 민아, 유진, 다미, 규리 민경이가 있네요.
수학 테이블에는 규리와, 민경이의 데이터가 존재하지 않습니다. 반면 영어 테이블에는 다미의 데이터가 존재하지 않습니다. inner join 과 다르게 full join 은 각 테이블 모든 데이터를 병합합니다.집합에서는 합집합의 개념과 동일합니다. 각 테이블에 없는 학생은 결측값(NA)로 반환됩니다. dplyr패키지에서 full_join 함수를 사용합니다.

full_join(test1,test2,by='name')
  name math english
1 서현   75      90
2 민아   85      95
3 유진   90      70
4 다미   70      NA
5 규리   NA      80
6 민경   NA      85

 

 

3. left join
left join은 왼쪽에 있는 테이블의 key을 기준으로 병합합니다. 왼쪽 테이블을 수학점수 테이블로 놓고, 오른쪽 테이블을 영어점수 테이블로 세팅해보겠습니다. 수학점수 테이블에는 서현, 민아, 유진, 다미가 있습니다. 이때 오른쪽 테이블(영어점수 테이블)과 병합합니다. dplyr패키지에서 left_join 함수를 사용합니다.

left_join(test1,test2,by='name')
  name math english
1 서현   75      90
2 민아   85      95
3 유진   90      70
4 다미   70      NA

위와 같이 영어점수 테이블에는 다미가 존재하지 않으므로 결측값을 반환합니다.

 

 

4. right join
left join과 반대로 right join 은 영어점수 테이블(오른쪽 테이블)에 있는 데이터를 반환합니다. 규리와 민경이는 수학점수 테이블에 존재하지 않으므로 결측값(NA)를 반환했습니다. dplyr패키지에서 right_join 함수를 사용합니다.

right_join(test1,test2,by='name')
  name math english
1 규리   NA      80
2 서현   75      90
3 민아   85      95
4 유진   90      70
5 민경   NA      85

 

정리를 해보면 다음과 같은 테이블들이 생성됩니다.

 

 

 

JOIN 의 여러 종류에 대해 알아보았습니다. 

처음 접한다면 헷갈수도 있는 부분이기 때문에 여러번 반복하고 실습해보시기 바랍니다.

궁금한 점은 댓글로 남겨주세요!

 

 

반응형