forcats để xử lý biến factor trong RTrong 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, mình 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.
Package forcats là 1 package rất phổ biến trong việc xử lý các biến rời rạc.
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…
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).
## '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 ...
## 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
##
#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"
## [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()Để đả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()Một hàm rất hữu dụng khác là fct_relevel. Nó 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')
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()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)) +
ggtitle(label = "We can make better comparison by reordering the levels based on the temperature values!") +
xlab("Month") +
theme_bw() +
theme(plot.title = element_text(size = 10, 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ả!