R 因子(Factor)基础概念
R 中的因子(Factor)是一种特殊的数据结构,用于表示分类变量。因子将字符向量转换为整数向量,并存储水平(Levels)信息,适用于统计建模和图形绘制。
创建因子的基本函数是 factor()。以下是一个简单示例:
# 创建字符向量
colors <- c("red", "blue", "green", "blue", "red")
# 转换为因子
color_factor <- factor(colors)
print(color_factor)
输出结果会显示因子的水平(Levels)和对应的整数编码:
[1] red blue green blue red
Levels: blue green red
因子水平操作
因子水平(Levels)是因子中独特的类别。可以通过 levels() 函数查看或修改:
# 查看水平
levels(color_factor)
# 修改水平名称
levels(color_factor) <- c("B", "G", "R")
print(color_factor)
输出:
[1] R B G B R
Levels: B G R
有序因子
有序因子(Ordered Factor)用于表示有顺序的分类变量。使用 ordered() 或 factor() 中的 ordered 参数创建:
# 创建有序因子
size <- c("S", "M", "L", "S", "M")
size_factor <- factor(size, ordered = TRUE, levels = c("S", "M", "L"))
print(size_factor)
输出会显示水平的顺序:
[1] S M L S M
Levels: S < M < L
因子与统计应用
因子在统计建模中非常重要,特别是在线性模型(如 lm())和广义线性模型(如 glm())中。以下是一个线性回归示例:
# 创建数据框
df <- data.frame(
yield = c(10.3, 12.1, 15.2, 9.8, 11.4),
variety = factor(c("A", "B", "B", "A", "A"))
)
# 拟合线性模型
model <- lm(yield ~ variety, data = df)
summary(model)
因子在数据可视化中的应用
因子常用于控制图形中的分组和颜色。以下是 ggplot2 的示例:
library(ggplot2)
# 使用因子控制颜色
ggplot(df, aes(x = variety, y = yield, color = variety)) +
geom_point(size = 3) +
labs(title = "Yield by Variety")
因子与表格操作
table() 函数可以快速统计因子频数:
# 创建因子
blood_type <- factor(c("A", "B", "AB", "O", "A", "B"))
# 统计频数
table(blood_type)
输出:
blood_type
A AB B O
2 1 2 1
因子与数据清洗
在数据清洗中,可能需要合并因子水平或处理缺失值:
# 合并水平
levels(color_factor) <- list(Primary = c("R", "B"), Secondary = "G")
print(color_factor)
# 处理缺失值(NA)
color_factor_na <- factor(c("red", NA, "green", "blue"))
is.na(color_factor_na) # 检测NA
因子与性能优化
对于大型数据集,因子比字符向量更高效,因为存储的是整数而非字符串。可以使用 forcats 包进行高级操作:
library(forcats)
# 重新编码水平
new_factor <- fct_recode(color_factor, "Primary1" = "Primary", "Primary2" = "Secondary")
print(new_factor)
因子转换为其他类型
有时需要将因子转换为数值或字符:
# 转换为字符
as.character(color_factor)
# 转换为数值(注意:得到的是水平编码)
as.numeric(color_factor)
注意事项
- 因子水平顺序会影响模型解释和图形输出。
- 直接对因子进行数学运算会导致意外结果,需先转换为数值。
- stringsAsFactors 参数在 R 4.0.0 后默认为 FALSE,需注意数据导入时的自动转换。




