놀고 싶어요

[R Programming] 데이터 결합 본문

R

[R Programming] 데이터 결합

챌린지 2021. 5. 10. 16:28

 

 

주요 테이블 결합: Join type 과 keys

 

key

두 테이블 간의 공통으로 존재해서 연결고리 역할을 하는 컬럼이다.

어떤 기준으로 두 테이블을 결합할 건지 정의 한 것. 하나 혹은 복수의 공통 컬럼 지정이 가능하다.

 

join type

output table에 값을 채워 넣는 방법이다.

 

dplyr 패키지의 join type 종류 - 각 함수의 이름이 된다.

- left_join: 왼쪽 테이블에 있는 데이터 기준으로 오른쪽 데이터를 가져오는 방식

- right_join: 오른쪽 테이블에 있는 데이터 기준으로 왼쪽 데이터를 가져오는 방식

- full_join (합집합)

- inner_join (교집합)

- semi_join: 공통 key가 있는 경우 왼쪽 테이블 값만 가져오는 방식

- anti_join: 왼쪽 테이블 key 값 중 오른쪽 테이블에 없는 경우만 가져 오는 방식

 

 

semi_join과 anti_join 둘 다 왼쪽 테이블을 오른쪽 테이블 내의 key값 유무 기준에 따라 필터링한다고 볼 수 있다.

둘 다 tibble, data.frame 이거나 하나만 data.frame이어도 join 함수 사용에 지장이 없다.

결과 창의 표현과 결과물의 class만 다르고 결과 자체는 동일하다.

 

 

 

 

(좌) bike_data (우) stations

bike_data의 station_no_out과 stations의 ID는 key 값이 된다.

 

bike_data2 <- inner_join(bike_data, stations, by = c("Station_no_out" = "ID"))

 

변수명 <- 조인 함수 (결합대상 데이터 파일a, 결합대상 데이터 파일b, by = c(“왼쪽키” = “오른쪽키”))

join 함수에는 결합할 방식에 따른 함수, 결합할  데이터 이름, by 표시하는 결합 기준이 필요하다.a를 left, b를 right 라고 지칭한다.

 

left_join인 경우, 첫 번째 인자인 left table 기준으로 조회하는 걸 의미한다.

by라고 지정되어 있는 key값을 기준으로 교집합에 해당하는 결합 데이터를 만들어 준다.

만약 두 컬럼이 같은 이름 'ID'로 들어가 있다면 by = "ID" 로 써도 된다.

 

 

 

36,586 행과 23개 컬럼으로 구성된 데이터가 만들어진다.

정보가 추가되어 별로 구분이 가능해졌다.

 

 

 



 

 

tb1 <- tibble(a=c('a','b','c'), b=c(1, 2, 3))

tb2 <- tibble(a=c(‘a’,’b’,’d’), c=c('가','나', '다'))

 

a컬럼이 같은 성격이므로 key로 사용 가능하다. 

 

  • Inner join

inner_join(tb1, tb2, by='a')

양쪽에 a가 있어 두 테이블이 그대로 합쳐진 형태로 나타난다.

 

  • Full join

full_join(tb1, tb2, by='a')

두 테이블의 모든 행과 컬럼을 합해서 보여준다. 비어 있는 셀은 NA로 표현된다.

 

  • left join

 

left_join(tb1, tb2, by='a')

왼쪽 테이블을 기준으로 두고 오른쪽 테이블의 내용을 결합.

동일한 a 컬럼이 있는 경우 오른쪽 테이블의 추가 컬럼을 넣어줌

동일한 값이 없는 경우 NA로 나타남

 

  • Right join

right_join(tb1, tb2, by='a')

오른쪽 테이블을 기준으로 두고 왼쪽 테이블의 내용을 결합.

key값에 해당하는 값이 왼쪽 테이블에 없음 - NA로 나타남

 

 

  • Semi join

semi_join(tb1, tb2, by='a')

공통 key가 있는 경우 왼쪽 테이블 값만 가져오는 방식.

오른 쪽 테이블에 c가 없어 양쪽 공통으로 있는 a, b만 표시된다.

 

  • Anti join

anti_join(tb1, tb2, by='a')

왼쪽 테이블을 기준으로 두고 오른쪽 테이블에 없는 경우만 가져오는 방식

오른쪽 테이블에 없는 c만 나타난다.