R - 因子:初学者指南
你好,有抱负的R语言程序员!今天,我们将深入探索R语言中因子的奇妙世界。如果你之前从未编写过代码,也不要担心 - 我将作为你在这个旅程中的友好向导,到旅程结束时,你将能够像一个专业人士一样处理因子!
因子是什么?
在我们跳入代码之前,让我们先了解一下因子是什么。在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
让我们分解一下这个过程:
- 我们首先创建了一个包含不同宠物偏好的向量
pets
。 - 然后我们使用
factor()
函数将这个向量转换为因子。 - 当我们打印因子时,R会显示值和因子中的水平(唯一的类别)。
-
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
这里发生了什么:
- 我们创建了一个包含名字、宠物偏好和年龄的数据框。
- 我们将 'pet' 列转换为因子。
-
str()
函数显示了我们的数据框结构。注意 'pet' 现在是一个有3个水平的因子。 -
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"
这里是我们做了什么:
- 我们创建了一个衬衫尺寸的因子。
- 初始时,R按字母顺序排列了水平。
- 然后我们使用
factor()
函数中的levels
参数来指定我们想要的顺序。 - 现在的水平顺序是我们指定的: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
让我们分解一下这个过程:
- 我们使用
month.abb
,一个内置的R常量,创建了一个月份缩写的因子。 - 然后我们创建了一个自定义的温度水平因子。
- 我们指定了我们想要的水平及其顺序。
- 通过设置
ordered = TRUE
,我们创建了一个有序因子,其中 Cold < Mild < Hot。
有用的因子方法
以下是一些处理因子的有用方法:
方法 | 描述 |
---|---|
levels() |
获取或设置因子的水平 |
nlevels() |
获取因子中的水平数 |
as.numeric() |
将因子转换为数字(基于水平顺序) |
as.character() |
将因子转换为字符 |
table() |
创建因子的频率表 |
droplevels() |
从因子中移除未使用的水平 |
记住,熟能生巧!尝试创建你自己的因子并尝试这些方法。在你意识到之前,你将能够像一个专业人士一样处理分类数据!
我希望这个教程能帮助你理解R语言中的因子。它们是处理分类数据的强大工具,掌握它们将使你的数据分析之旅更加顺畅。快乐编码!
Credits: Image by storyset