Tác giả: Nguyễn Hải Trường | 2018-12-10
Thông thường trong quá trình phân tích dữ liệu, chúng ta sẽ gặp phải vấn đề liên quan đến chất lượng dữ liệu. Do vậy, việc trước tiên chúng ta cần phải làm đó là xử lý, làm sạch dữ liệu. Trong bài viết này, Ranalytics
sẽ hướng dẫn các bạn sử dụng một trong những hàm rất phổ biến và hữu dụng trong việc xử lý dữ liệu trong R
- hàm case_when()
.
Chúng ta sẽ sử dụng dữ liệu iris
có sẵn trong R
để làm ví dụ minh họa.
library(dplyr)
data("iris")
iris %>% summary
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
Giả sử chúng ta muốn tạo thêm 1 biến mới (ví dụ tên là Range_Sepal_Length
) dựa vào biến có sẵn Sepal.Length
với những điều kiện như sau:
Sepal.Length < 5 (cm): low
5 <= Sepal.Length <= 6 (cm): medium
Sepal.Length > 6 (cm): high
Như vậy, biến mới Range_Sepal_Length
sẽ phải gồm 3 giá trị (low
, medium
, high
) với những điều kiện nêu trên theo biến Sepal.Length
.
Trong R
, chúng ta sẽ sử dụng hàm case_when()
kết hợp hàm mutate()
(hàm mutate()
chúng ta sử dụng khi muốn thêm trường dữ liệu mới trong R
):
iris %>%
mutate(Range_Sepal_Length = case_when(
Sepal.Length < 5 ~ "low",
Sepal.Length >= 5 & Sepal.Length <= 6 ~ "medium",
TRUE ~ "high" # TRUE - với những trường hợp còn lại
) %>% as.factor) %>%
head
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## Range_Sepal_Length
## 1 medium
## 2 low
## 3 low
## 4 low
## 5 medium
## 6 medium
Như vậy, chúng ta đã vừa thêm trường dữ liệu mới Range_Sepal_Length
- phái sinh từ trường Sepal.Length
.
Lưu ý!!!: Đối với những ai đang sử dụng package dplyr
version cũ, có thể sẽ gặp lỗi trong câu lệnh nói trên. Để khắc phục vấn đề trên, chúng ta có thể download package dplyr
version mới nhất HOẶC đơn giản hơn là thêm .$
vào trước biến để lọc điều kiện (trong trường hợp này là Sepal.Length
) như sau:
iris %>%
mutate(Range_Sepal_Length = case_when(
.$Sepal.Length < 5 ~ "low",
.$Sepal.Length >= 5 & .$Sepal.Length <= 6 ~ "medium",
TRUE ~ "high" # TRUE - với những trường hợp còn lại
) %>% as.factor) %>%
head
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## Range_Sepal_Length
## 1 medium
## 2 low
## 3 low
## 4 low
## 5 medium
## 6 medium
Như vậy, chúng ta đã vừa được làm quen với cách sử dụng hàm case_when()
kết hợp mutate()
. Chúc các bạn học tập và làm việc hiệu quả với Ranalytics.vn
!