Tác giả: Nguyễn Hải Trường | 2018-08-07
Trong quá trình phân tích dữ liệu, chúng ta sẽ thường gặp phải những vấn đề liên quan đến việc xử lý các biến rời rạc (factor/categorical variable). Trong bài viết này, Ranalytics
sẽ hướng dẫn các bạn sử dụng một số hàm cơ bản trong package forcats
để xử lý các biến rời rạc.
Forcats package
Package forcats
là 1 package rất hữu dụng trong việc xử lý các biến rời rạc có thuộc tính là nhóm (factor) trong R
.
Biến rời rạc là biến mà chúng ta không thể hiện được dưới dạng số, mà chỉ thể hiện tính chất của thực thế, ví dụ: giới tính, tình trạng hôn nhân, nghề nghiệp…
library(dplyr)
library(ggplot2)
library(forcats)
Factor Recode
Một trong những hàm rất hữu dụng trong package forcats
là fct_recode
. Nó giúp chúng ta thay đổi các giá trị (levels) của 1 biến rời rạc (factor).
# Sử dụng dữ liệu airquality có sẵn trong R
data("airquality")
airquality %>% str
## 'data.frame': 153 obs. of 6 variables:
## $ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...
## $ Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
## $ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
## $ Temp : int 67 72 74 62 56 66 65 59 61 69 ...
## $ Month : int 5 5 5 5 5 5 5 5 5 5 ...
## $ Day : int 1 2 3 4 5 6 7 8 9 10 ...
airquality %>% summary
## Ozone Solar.R Wind Temp
## Min. : 1.00 Min. : 7.0 Min. : 1.700 Min. :56.00
## 1st Qu.: 18.00 1st Qu.:115.8 1st Qu.: 7.400 1st Qu.:72.00
## Median : 31.50 Median :205.0 Median : 9.700 Median :79.00
## Mean : 42.13 Mean :185.9 Mean : 9.958 Mean :77.88
## 3rd Qu.: 63.25 3rd Qu.:258.8 3rd Qu.:11.500 3rd Qu.:85.00
## Max. :168.00 Max. :334.0 Max. :20.700 Max. :97.00
## NA's :37 NA's :7
## Month Day
## Min. :5.000 Min. : 1.0
## 1st Qu.:6.000 1st Qu.: 8.0
## Median :7.000 Median :16.0
## Mean :6.993 Mean :15.8
## 3rd Qu.:8.000 3rd Qu.:23.0
## Max. :9.000 Max. :31.0
##
Trong tập dữ liệu trên, biến month đang có định dạng là integer, chuyển thành định dạng factor
airquality$Month <- airquality$Month %>%
as.factor
airquality$Month %>% class
## [1] "factor"
levels(airquality$Month)
## [1] "5" "6" "7" "8" "9"
Thay tên các tháng sử dụng hàm fct_recode
airquality$Month <- fct_recode(airquality$Month,
May = '5',
June = '6',
July = '7',
August = '8',
September = '9')
levels(airquality$Month)
## [1] "May" "June" "July" "August" "September"
library(ggplot2)
airquality %>%
ggplot(aes(Month, Temp)) +
geom_boxplot(aes(fill = Month)) +
ggtitle(label = "Daily Temperatures Aggregated by Month") +
theme_bw()
Factor Reverse
Để đảo ngược lại thứ tự các giá trị trong 1 biến rời rạc chúng ta dùng hàm fct_rev
.
airquality %>%
ggplot(aes(fct_rev(Month), Temp)) +
geom_boxplot(aes(fill = Month)) +
labs(x = "Month") +
ggtitle(label = "Our plot now has the x-axis in reverse order") +
theme_bw()
Factor Relevel
Một hàm rất hữu dụng khác là fct_relevel
. Hàm này giúp chúng ta thay đổi bất kỳ giá trị của 1 biến rời rạc ở bất cứ vị trí nào ta mong muốn. Giả sử ta muốn vẽ biểu đồ nhiệt độ các tháng theo thứ tự: September, July, May, August, June
airquality$Month <- fct_relevel(airquality$Month, 'September', 'July', 'May', 'August', 'June')
#Kiểm tra lại thứ tự của factor
levels(airquality$Month)
## [1] "September" "July" "May" "August" "June"
airquality %>%
ggplot(aes(Month, Temp)) +
geom_boxplot(aes(fill = Month)) +
ggtitle(label = "Notice how the order of the level 'Month' has changed") +
theme_bw()
Factor Reorder
Một hàm khác thường xuyên được sử dụng để sắp xếp theo thứ tự tăng/giảm dần của 1 biến rời rạc dựa vào giá trị của 1 biến số khác là fct_reorder
.
Giả sử, trong trường hợp này chúng ta muốn sắp xếp các tháng theo nhiệt độ tăng dần. Ta có thể lựa chọn .desc=T
(thứ tự giảm dần) hoặc .desc=F
(tăng dần)
airquality %>%
ggplot(aes(x = fct_reorder(Month, Temp, .desc = F), y = Temp)) +
geom_boxplot(aes(fill = Month)) +
labs(title = "We can make better comparison",
subtitle = "by reordering the levels based on the temperature values!",
x = "Month") +
theme_bw() +
theme(plot.title = element_text(size = 12,
face = 'bold'))
Như vậy, chúng ta đã vừa được làm quen với một số hàm cơ bản trong package forcats
như thay đổi và sắp xếp thứ tự các giá trị của 1 biến rời rạc. Chúc các bạn học tập và làm việc hiệu quả với Ranalytics.vn
!