Loại bỏ dòng hoặc cột chứa giá trị missing

Tác giả: Nguyễn Hải Trường | 2019-06-20

Trong quá trình phân tích dữ liệu, chúng ta sẽ rất hay gặp phải vấn đề dữ liệu bị thiếu do không có dữ liệu. Những giá trị bị thiếu này trong R sẽ hiển thị là NA.

Trong bài viết này, Ranalytics sẽ hướng dẫn các bạn cách loại bỏ dòng hoặc cột chứa giá trị NA trong R.


Ta sử dụng dữ liệu giả lập sau đây:

data1 <- data.frame(
  customer = c("Hai", "Phong", "Hiep", "Hoa"),
  age = c(20,26,30,NA),
  income_mil_VND = c(15,8,NA,20),
  province = c(NA,NA,NA,NA),
  gender = c("Male", "Male", "Male", "Female")
)

data1
##   customer age income_mil_VND province gender
## 1      Hai  20             15       NA   Male
## 2    Phong  26              8       NA   Male
## 3     Hiep  30             NA       NA   Male
## 4      Hoa  NA             20       NA Female

Dữ liệu bao gồm thông tin về tuổi, thu nhập bình quân 1 tháng và tỉnh/TP sinh sống của 4 khách hàng sử dụng thẻ tín dụng.

Xóa dòng chứa NA

drop_na

Hàm drop_na() trong package tidyr giúp chúng ta loại bỏ dòng có giá trị NA ở 1 hoặc nhiều cột xác định nào đó.

library(dplyr)
library(tidyr)
data1 %>% 
  # Loại bỏ dòng có giá trị `NA` ở cột `income_mil_VND`
  drop_na(income_mil_VND)
##   customer age income_mil_VND province gender
## 1      Hai  20             15       NA   Male
## 2    Phong  26              8       NA   Male
## 4      Hoa  NA             20       NA Female

Một cách khác tương tự, chúng ta có thể sử dụng filter(!is.na())

data1 %>% 
  # chỉ lấy những quan sát ko bị `NA` ở trường income_mil_VND
  filter(!is.na(income_mil_VND))
##   customer age income_mil_VND province gender
## 1      Hai  20             15       NA   Male
## 2    Phong  26              8       NA   Male
## 3      Hoa  NA             20       NA Female

Vừa rồi, chúng ta đã vừa loại bỏ đi khách hàng tên Hiep vì không có thông tin về thu nhập.

na.omit

na_omit() giúp chúng ta loại bỏ các dòng mà có giá trị NA ở bất kỳ cột nào trong dữ liệu.

Giả sử chúng ta có data2data1 bỏ đi cột province.

data2 <- data1 %>% 
  select(-province)

data2
##   customer age income_mil_VND gender
## 1      Hai  20             15   Male
## 2    Phong  26              8   Male
## 3     Hiep  30             NA   Male
## 4      Hoa  NA             20 Female

Sử dụng na.omit() với data2 sẽ giúp chúng ta loại bỏ đi những khách hàng mà ko có một trong những thông tin về tuổi, thu nhập, tỉnh/TP sinh sống.

data2 %>% 
  na.omit()
##   customer age income_mil_VND gender
## 1      Hai  20             15   Male
## 2    Phong  26              8   Male

Xóa cột chứa NA

Để xóa tất cả các cột mà tất cả các giá trị trong cột đều là NA chúng ta có thể dùng câu lệnh sau:

data1[colSums(!is.na(data1)) > 0]
##   customer age income_mil_VND gender
## 1      Hai  20             15   Male
## 2    Phong  26              8   Male
## 3     Hiep  30             NA   Male
## 4      Hoa  NA             20 Female

Để xóa tất cả những cột mà có ít nhất một giá trị NA chúng ta có thể dùng câu lệnh sau:

data1[colSums(is.na(data1)) == 0]
##   customer gender
## 1      Hai   Male
## 2    Phong   Male
## 3     Hiep   Male
## 4      Hoa Female

Như vậy, chúng ta đã vừa được học cách loại bỏ dòng hoặc cột chứa giá trị missing trong R. Chúc các bạn học tập và làm việc hiệu quả với Ranalytics.vn!

comments powered by Disqus