R - Factors: A Beginner's Guide

你好,有抱負的R語言編程新手!今天,我們將要深入探索R語言中因子的迷人世界。別擔心如果你之前從未編過程——我將成為你這次旅程中的友好導遊,並且到了最後,你將會像專家一樣進行因子操作!

R - Factors

Factors是什麼?

在我們跳進程式碼之前,讓我們先來了解因子是什麼。在R語言中,因子用於表示分類數據。把它們當作是一種給你的數據中的不同群組或類別進行標記和組織的方式。

舉個例子,如果你正在收集關於同學們最愛的冰淇淋口味的數據,你可能會使用因子來表示不同的口味:巧克力、香草、草莓等等。每一種口味都會是你的因子中的一個“級別”。

現在,讓我們看看如何在R中創建和操作因子!

示例:創建你的第一個因子

讓我們從一個簡單的例子開始。假設我們正在進行一項關於人們最愛寵物的調查。

# 創建一個寵物偏好的向量
pets <- c("Dog", "Cat", "Dog", "Fish", "Cat", "Dog", "Hamster")

# 將向量轉換為因子
pet_factor <- factor(pets)

# 打印因子
print(pet_factor)

# 獲取因子的摘要
summary(pet_factor)

當你運行這段代碼時,你會看到類似這樣的輸出:

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

Cat Dog Fish Hamster
2   3    1       1

讓我們來分解這些步驟:

  1. 我們首先創建了一個名為pets的向量,包含了不同的寵物偏好。
  2. 然後我們使用factor()函數將這個向量轉換成因子。
  3. 當我們打印因子時,R會顯示給我們的值和因子中的級別(唯一的類別)。
  4. summary()函數為我們提供每個級別在我們的因子中出現次數的統計。

難道不覺得R自動識別了唯一的類別並為我們計數這一事實很棒嗎?這就是因子在分類數據中如此有用的原因!

Factors在數據框中

現在,讓我們看看因子如何在數據框中工作,數據框是R中存儲數據的常見結構。

# 創建一個包含寵物偏好和年齡的數據框
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)
)

# 將'pet'列轉換為因子
pet_data$pet <- factor(pet_data$pet)

# 打印數據框的結構
str(pet_data)

# 獲取數據框的摘要
summary(pet_data)

運行這段代碼會給你以下輸出:

'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

這裡發生了什麼:

  1. 我們創建了一個包含名字、寵物偏好和年齡的數據框。
  2. 我們將'pet'列轉換為因子。
  3. str()函數向我們顯示了我們數據框的結構。注意'pet'現在是一個具有3個級別的因子。
  4. summary()函數為我們提供了每個列的摘要,包括因子列中每種寵物類型的計數。

改變級別的順序

有時候,你可能想要改變因子中級別的順序。讓我們看看如何做到這一點:

# 創建一個衣服尺寸的因子
sizes <- factor(c("Small", "Medium", "Large", "Small", "Medium"))

# 打印當前的級別
print(levels(sizes))

# 改變級別的順序
sizes <- factor(sizes, levels = c("Small", "Medium", "Large"))

# 打印新的級別
print(levels(sizes))

這會輸出:

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

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

這是我們如何做到的:

  1. 我們創建了一個衣服尺寸的因子。
  2. 初始時,R按字母順序對級別進行了排序。
  3. 然後我們使用factor()函數中的levels參數來指定我們希望的順序。
  4. 級別現在是我們指定的順序:Small, Medium, Large。

這在創建模型或製作圖表時特別有用,當你想要控制類別出現的順序時。

生成交叉因子級別

有時候,你可能想要以程式化的方式生成因子級別。以下是如何做到這一點:

# 生成交叉月份的序列
months <- factor(month.abb)

# 打印級別
print(levels(months))

# 創建一個具有自定義級別的因子
temperatures <- factor(c("Cold", "Hot", "Mild", "Hot", "Cold"),
levels = c("Cold", "Mild", "Hot"),
ordered = TRUE)

# 打印因子
print(temperatures)

這會輸出:

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

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

讓我們來分解這些步驟:

  1. 我們使用month.abb,一個內置的R常量,來創建一個月簡寫的因子。
  2. 然後我們創建了一個自定義的溫度因子。
  3. 我們指定了我們想要的級別和他們的順序。
  4. 通過設定ordered = TRUE,我們創建了一個有序的因子,其中Cold < Mild < Hot。

有用的因子方法

以下是一些有用的因子方法:

方法 描述
levels() 獲取或設置因子的級別
nlevels() 獲取因子中的級別數量
as.numeric() 將因子轉換為數字(基於級別順序)
as.character() 將因子轉換為字符
table() 創建因子的頻率表
droplevels() 從因子中刪除未使用的級別

記住,熟能生巧!嘗試創建你自己的因子並試著使用這些方法。在你還沒有察覺之前,你將會像專家一樣處理分類數據!

我希望這個教程能夠幫助你理解R語言中的因子。它們是處理分類數據的有力工具,掌握它們將使你的數據分析之旅更加順暢。開心地編程!

Credits: Image by storyset