Tác giả: Nguyễn Hải Trường | 2019-03-05
Trong thực tế dữ liệu của chúng ta có thể lưu trữ rời rạc ở các bảng dữ liệu khác nhau, vì vậy sẽ có lúc chúng ta cần phải nối các bảng dữ liệu với nhau để có thêm thông tin phục vụ cho việc phân tích dữ liệu.
Trong bài viết này, Ranalytics
sẽ hướng dẫn các bạn cách nối các bảng dữ liệu sử dụng nhóm hàm join trong R
.
Mutating join
Giả sử chúng ta có 2 data về việc khách hàng sử dụng các sản phẩm ngân hàng như sau:
# Data frame 1
df1 <- data.frame(CustomerId = c(1:6), Product = c(rep("CreditCard", 3), rep("HomeLoan", 3)))
df1
## CustomerId Product
## 1 1 CreditCard
## 2 2 CreditCard
## 3 3 CreditCard
## 4 4 HomeLoan
## 5 5 HomeLoan
## 6 6 HomeLoan
# Data frame 2
df2 <- data.frame(CustomerId = c(2, 4, 7), Province = c(rep("Hanoi", 2), rep("Hochiminh", 1)))
df2
## CustomerId Province
## 1 2 Hanoi
## 2 4 Hanoi
## 3 7 Hochiminh
Hai bảng dữ liệu này có chung trường key là CustomerId
.
left_join
Hàm left_join()
sẽ lấy tất cả dữ liệu có trong bảng đầu tiên.
library(dplyr)
df1 %>%
left_join(df2,
by = "CustomerId" # nối theo trường key
)
## CustomerId Product Province
## 1 1 CreditCard <NA>
## 2 2 CreditCard Hanoi
## 3 3 CreditCard <NA>
## 4 4 HomeLoan Hanoi
## 5 5 HomeLoan <NA>
## 6 6 HomeLoan <NA>
right_join
Hàm right_join()
sẽ lấy tất cả dữ liệu có trong bảng thứ hai.
df1 %>%
right_join(df2,
by = "CustomerId" # nối theo trường key
)
## CustomerId Product Province
## 1 2 CreditCard Hanoi
## 2 4 HomeLoan Hanoi
## 3 7 <NA> Hochiminh
inner_join
Hàm inner_join()
sẽ lấy tất cả dữ liệu trùng key có trong cả 2 bảng.
df1 %>%
inner_join(df2,
by = "CustomerId" # nối theo trường key
)
## CustomerId Product Province
## 1 2 CreditCard Hanoi
## 2 4 HomeLoan Hanoi
full_join
Hàm full_join()
sẽ lấy tất cả dữ liệu có 1 trong 2 bảng.
df1 %>%
full_join(df2,
by = "CustomerId" # nối theo trường key
)
## CustomerId Product Province
## 1 1 CreditCard <NA>
## 2 2 CreditCard Hanoi
## 3 3 CreditCard <NA>
## 4 4 HomeLoan Hanoi
## 5 5 HomeLoan <NA>
## 6 6 HomeLoan <NA>
## 7 7 <NA> Hochiminh
Filtering join
semi_join
Hàm semi_join()
lấy những quan sát có
trong bảng đầu tiên và đồng thời có
trong bảng thứ hai. Các biến/cột sẽ chỉ lấy theo bảng đầu tiên - đây chính là điểm khác biệt so với inner_join()
.
df1 %>%
semi_join(df2,
by = "CustomerId" # nối theo trường key
)
## CustomerId Product
## 1 2 CreditCard
## 2 4 HomeLoan
anti_join
Hàm anti_join()
lấy những quan sát có
trong bảng đầu tiên mà ko có
trong bảng thứ hai. Các biến/cột sẽ chỉ lấy theo bảng đầu tiên.
df1 %>%
anti_join(df2,
by = "CustomerId" # nối theo trường key
)
## CustomerId Product
## 1 1 CreditCard
## 2 3 CreditCard
## 3 5 HomeLoan
## 4 6 HomeLoan
Như vậy, chúng ta đã vừa được học cách nối các bảng dữ liệu với nhau sử dụng nhóm hàm join. Chúc các bạn học tập và làm việc hiệu quả với Ranalytics.vn
!