본문 바로가기
  • plotly로 바로쓰는 동적시각화 in R & 파이썬
데이터 전처리

데이터프레임 합치기(Merge) in R

by 아참형인간 2022. 6. 12.
merge.knit

데이터 결합

서로 다른 데이터프레임에 저장된 데이터를 합쳐서 하나의 데이터프레임으로 만들어 사용하는 것을 데이터 결합(Merge)이라고 한다. R에서 데이터를 결합하는 방법은 데이터 조인과 데이터 바인딩으로 구분된다.

데이터 조인

데이터 조인은 서로 다른 데이터프레임에서 같은 값을 가진 열의 데이터를 사용하여 두개의 데이터프레임을 하나로 묶어주는 방법이다. 조인의 기준을 어디에 두느냐에 따라 왼쪽 조인(left_join()), 오른쪽 조인(right_join()), 내부 조인(inner_join()), 전체 조인(full_Join())으로 구분된다.

  • 왼쪽 조인 : 조인의 기준을 왼쪽 데이터프레임에 두고 왼쪽 데이터 프레임에 대응되는 오른쪽 데이터프레임의 값을 가져온다. 만약 왼쪽 데이터프레임에 대응되는 오른쪽 데이터프레임의 값이 없다면 NA값을 넣어준다.
  • 오른쪽 조인 : 조인의 기준을 오른쪽 데이터프레임에 두고 오른쪽 데이터 프레임에 대응되는 왼쪽 데이터프레임의 값을 가져온다. 만약 오른쪽 데이터프레임에 대응되는 왼쪽 데이터프레임의 값이 없다면 NA값을 넣어준다.
  • 내부 조인 : 두개의 데이터프레임의 결합 기준이 되는 데이터가 일치하는 데이터만 조인된다. 앞의 왼쪽 조인, 오른쪽 조인에서 NA값을 제거하는 방법이다.
  • 전체 조인 : 왼쪽 조인과 오른쪽 조인을 모두 사용하는 방법으로 왼쪽 조인으로 발생되는 NA와 오른쪽 조인으로 발생되는 NA를 모두 생성하는 방법이다.

left_join(x, y, by, copy = FALSE, suffix = c(“.x”, “.y”), …, keep = FALSE)

right_join(x, y, by, copy = FALSE, suffix = c(“.x”, “.y”), …, keep = FALSE)

inner_join(x, y, by, copy = FALSE, suffix = c(“.x”, “.y”), …, keep = FALSE)

full_join(x, y, by, copy = FALSE, suffix = c(“.x”, “.y”), …, keep = FALSE)
- x : 왼쪽 데이터프레임
- y : 오른쪽 데이터프레임
- by : 조인의 기준이 될 열


## 조인을 위한 데이터프레임 생성
df_join1 <- data.frame(A = c(1, 2, 3), B = c('가', '가', '나'))

df_join2 <- data.frame(A = c(1, 2, 4), C = c('A', 'B', 'B'))

## df_join1을 기준으로 한 조인
left_join(df_join1, df_join2, by = 'A')
##   A  B    C
## 1 1 가    A
## 2 2 가    B
## 3 3 나 <NA>
## df_join2을 기준으로 한 조인
right_join(df_join1, df_join2, by = 'A')
##   A    B C
## 1 1   가 A
## 2 2   가 B
## 3 4 <NA> B
## 양쪽 데이터 모두 해당하는 조인
inner_join(df_join1, df_join2, by = 'A')
##   A  B C
## 1 1 가 A
## 2 2 가 B
## 전체 데이터에 대한 조인
full_join(df_join1, df_join2, by = 'A')
##   A    B    C
## 1 1   가    A
## 2 2   가    B
## 3 3   나 <NA>
## 4 4 <NA>    B

데이터 바인딩

데이터 조인과 달리 데이터 바인딩은 특별한 조건없이 데이터를 행 방향(아래쪽)이나 열 방향(오른쪽)에 붙이는 방법이다. 행 방향으로 데이터를 붙이는 것은 bind_rows()를 사용하고 열 방향으로 데이터를 붙이는 것은 bind_cols()를 사용한다. bind_cols()는 두개의 데이터프레임의 행의 개수가 같아야하고 각 데이터프레임의 행 순서대로 붙는다. bind_rows()는 두개의 데이터프레임의 열의 개수가 같아야하고 붙는 순서는 각 데이터프레임의 열의 순서대로 붙는다. 그리고 bind_rows()에서 하나 주의할 점이 각각의 열의 순서에 따른 데이터 타입이 같아야 한다는 점이다.

bind_cols(…, .id = NULL)

bind_rows(…, .name_repair = c(“unique”, “universal”, “check_unique”, “minimal”))
- … : 바인딩 할 데이터프레임
- .id : 데이터프레임 id


## 데이터 바인딩을 위한 데이터프레임 생성
df_bind1 <- data.frame(A = c(1, 2, 3), B = c('가', '가', '나'))

df_bind2 <- data.frame(A = c(1, 2, 4), C = c('A', 'B', 'B'))

## 열 방향 데이터 바인딩
bind_cols(df_bind1, df_bind2)
##   A...1  B A...3 C
## 1     1 가     1 A
## 2     2 가     2 B
## 3     3 나     4 B
## 행 방향 데이터 바인딩
bind_rows(df_bind1, df_bind2)
##   A    B    C
## 1 1   가 <NA>
## 2 2   가 <NA>
## 3 3   나 <NA>
## 4 1 <NA>    A
## 5 2 <NA>    B
## 6 4 <NA>    B

댓글