Hướng dẫn cơ bản về Factors trong R

Xin chào các bạn đang học lập trình R! Hôm nay, chúng ta sẽ cùng khám phá thế giới thú vị của factors trong R. Đừng lo lắng nếu bạn chưa từng viết mã trước đây - tôi sẽ là người hướng dẫn thân thiện của bạn trong hành trình này, và đến cuối cùng, bạn sẽ thành thạo việc sử dụng factors!

R - Factors

Factors là gì?

Trước khi chúng ta nhảy vào mã, hãy hiểu factors là gì. Trong R, factors được sử dụng để đại diện cho dữ liệu phân loại. Hãy nghĩ về chúng như một cách để gắn thẻ và tổ chức các nhóm hoặc danh mục khác nhau trong dữ liệu của bạn.

Ví dụ, nếu bạn đang thu thập dữ liệu về sở thích kem của bạn bè trong lớp, bạn có thể sử dụng factors để đại diện cho các hương vị khác nhau: chocolate, vanilla, dâu tây, và vân vân. Mỗi hương vị sẽ là một "mức độ" trong factor của bạn.

Bây giờ, hãy cùng xem cách chúng ta có thể tạo và làm việc với factors trong R!

Ví dụ: Tạo factor đầu tiên

Hãy bắt đầu với một ví dụ đơn giản. Hãy tưởng tượng chúng ta đang tiến hành một cuộc khảo sát về sở thích động vật của người dân.

# Tạo một vector của sở thích động vật
pets <- c("Dog", "Cat", "Dog", "Fish", "Cat", "Dog", "Hamster")

# Chuyển vector thành factor
pet_factor <- factor(pets)

# In factor
print(pet_factor)

# Lấy tóm tắt của factor
summary(pet_factor)

Khi bạn chạy đoạn mã này, bạn sẽ thấy điều này:

[1] Dog     Cat     Dog     Fish    Cat     Dog     Hamster
Levels: Cat Dog Fish Hamster

Cat Dog Fish Hamster
2   3    1       1

Hãy phân tích điều này:

  1. Chúng ta đầu tiên tạo một vector pets với các sở thích động vật khác nhau.
  2. Sau đó, chúng ta sử dụng hàm factor() để chuyển vector này thành factor.
  3. Khi chúng ta in factor, R sẽ hiển thị cho chúng ta các giá trị và các mức độ (danh mục duy nhất) trong factor.
  4. Hàm summary() cung cấp cho chúng ta một thống kê về số lần xuất hiện của mỗi mức độ trong factor.

Thật tuyệt vời khi R tự động nhận diện các danh mục duy nhất và đếm chúng cho chúng ta, phải không? Đó là lý do tại sao factors rất hữu ích cho dữ liệu phân loại!

Factors trong Data Frame

Bây giờ, hãy xem factors hoạt động như thế nào trong một data frame, đây là một cấu trúc phổ biến để lưu trữ dữ liệu trong R.

# Tạo một data frame với sở thích động vật và tuổi
pet_data <- data.frame(
name = c("Alice", "Bob", "Charlie", "David", "Eve"),
pet = c("Dog", "Cat", "Dog", "Fish", "Cat"),
age = c(25, 30, 35, 28, 22)
)

# Chuyển cột 'pet' thành factor
pet_data$pet <- factor(pet_data$pet)

# In cấu trúc của data frame
str(pet_data)

# Lấy tóm tắt của data frame
summary(pet_data)

Chạy đoạn mã này sẽ cho bạn:

'data.frame':   5 obs. of  3 variables:
$ name: chr  "Alice" "Bob" "Charlie" "David" ...
$ pet : Factor w/ 3 levels "Cat","Dog","Fish": 2 1 2 3 1
$ age : num  25 30 35 28 22

name                pet        age
Length:5           Cat    :2   Min.   :22.00
Class :character   Dog    :2   1st Qu.:25.00
Mode  :character   Fish   :1   Median :28.00
Mean   :28.00
3rd Qu.:30.00
Max.   :35.00

Dưới đây là những gì đang xảy ra:

  1. Chúng ta tạo một data frame với tên, sở thích động vật và tuổi.
  2. Chúng ta chuyển cột 'pet' thành factor.
  3. Hàm str() hiển thị cấu trúc của data frame. Chú ý rằng 'pet' bây giờ là một factor với 3 mức độ.
  4. Hàm summary() cung cấp cho chúng ta một tóm tắt của từng cột, bao gồm cả số lần xuất hiện của mỗi loại động vật trong cột factor.

Thay đổi thứ tự của các mức độ

Đôi khi, bạn có thể muốn thay đổi thứ tự của các mức độ trong factor. Hãy xem chúng ta có thể làm điều đó như thế nào:

# Tạo một factor của kích thước áo
sizes <- factor(c("Small", "Medium", "Large", "Small", "Medium"))

# In các mức độ hiện tại
print(levels(sizes))

# Thay đổi thứ tự của các mức độ
sizes <- factor(sizes, levels = c("Small", "Medium", "Large"))

# In các mức độ mới
print(levels(sizes))

Điều này sẽ输出:

[1] "Large"  "Medium" "Small"

[1] "Small"  "Medium" "Large"

Dưới đây là những gì chúng ta đã làm:

  1. Chúng ta tạo một factor của kích thước áo.
  2. Ban đầu, R đã sắp xếp các mức độ theo thứ tự bảng chữ cái.
  3. Sau đó, chúng ta sử dụng tham số levels trong hàm factor() để xác định thứ tự mong muốn.
  4. Các mức độ bây giờ theo thứ tự chúng ta đã xác định: Small, Medium, Large.

Điều này đặc biệt hữu ích khi bạn đang tạo biểu đồ hoặc bảng và muốn kiểm soát thứ tự mà các danh mục xuất hiện.

Tạo các mức độ factor tự động

Đôi khi, bạn có thể muốn tạo các mức độ factor một cách tự động. Dưới đây là cách bạn có thể làm điều đó:

# Tạo một chuỗi các tháng
months <- factor(month.abb)

# In các mức độ
print(levels(months))

# Tạo một factor với các mức độ tùy chỉnh
temperatures <- factor(c("Cold", "Hot", "Mild", "Hot", "Cold"),
levels = c("Cold", "Mild", "Hot"),
ordered = TRUE)

# In factor
print(temperatures)

Điều này sẽ output:

[1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"

[1] Cold Hot  Mild Hot  Cold
Levels: Cold < Mild < Hot

Hãy phân tích điều này:

  1. Chúng ta sử dụng month.abb, một hằng số có sẵn trong R, để tạo một factor của các tháng缩写.
  2. Sau đó, chúng ta tạo một factor tùy chỉnh cho nhiệt độ.
  3. Chúng ta xác định các mức độ chúng ta muốn và thứ tự của chúng.
  4. Bằng cách đặt ordered = TRUE, chúng ta tạo một factor có thứ tự, nơi Cold < Mild < Hot.

Các phương thức hữu ích cho factor

Dưới đây là bảng các phương thức hữu ích để làm việc với factors:

Phương thức Mô tả
levels() Lấy hoặc đặt các mức độ của factor
nlevels() Lấy số lượng mức độ trong factor
as.numeric() Chuyển factor thành số (dựa trên thứ tự mức độ)
as.character() Chuyển factor thành ký tự
table() Tạo bảng tần suất của factor
droplevels() Loại bỏ các mức độ không sử dụng từ factor

Hãy nhớ rằng, thực hành là cách tốt nhất để trở nên thành thạo! Hãy thử tạo các factor của riêng bạn và thử nghiệm với các phương thức này. Trước khi bạn biết, bạn sẽ xử lý dữ liệu phân loại như một chuyên gia!

Tôi hy vọng hướng dẫn này đã giúp bạn hiểu factors trong R. Chúng là một công cụ mạnh mẽ để làm việc với dữ liệu phân loại, và việc thành thạo chúng sẽ làm cho hành trình phân tích dữ liệu của bạn trở nên mượt mà hơn. Chúc các bạn may mắn với mã của mình!

Credits: Image by storyset