R - 因子:初学者指南

你好,有抱负的R语言程序员!今天,我们将深入探索R语言中因子的奇妙世界。如果你之前从未编写过代码,也不要担心 - 我将作为你在这个旅程中的友好向导,到旅程结束时,你将能够像一个专业人士一样处理因子!

R - 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自动识别了唯一的类别并为我们计数,这难道不酷吗?这就是因子在分类数据中如此有用的原因!

数据框中的因子

现在,让我们看看因子在数据框中是如何工作的,数据框是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