You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中将数据集中的分类列转换为数值型值

R语言分类列转数值的实现方法

你可以根据自身需求选择以下几种实现方式:

  • 方法1:基础R手动映射(适合需要自定义数值对应关系的场景)
    这种方式可控性最高,不会因为因子默认顺序问题出现对应错误:
## 加载示例数据
library(vcd)
data(Arthritis)
Arthritis <- Arthritis[,2:5]

## 逐列指定映射规则
# Treatment列:Treated对应1,Placebo对应0
Arthritis$Treatment <- ifelse(Arthritis$Treatment == "Treated", 1, 0)
# Sex列:Male对应1,Female对应0
Arthritis$Sex <- ifelse(Arthritis$Sex == "Male", 1, 0)
# Improved列:None对应0,Some对应1,Marked对应2
Arthritis$Improved <- as.integer(Arthritis$Improved) - 1

## 查看转换结果
head(Arthritis)

运行后输出和你给出的预期效果完全一致。

  • 方法2:批量转换所有分类列(适合分类列数量多的场景)
    如果所有分类列只需要按因子水平顺序转成连续数值,可以批量处理:
# 筛选出所有因子/字符类型的列
class_cols <- sapply(Arthritis, function(x) is.factor(x) | is.character(x))
# 批量转换为数值,需要从0开始的话末尾减1即可
Arthritis[class_cols] <- lapply(Arthritis[class_cols], function(x) as.integer(factor(x)))
  • 方法3:dplyr语法实现(适合习惯tidyverse生态的用户)
    用case_when可以更清晰的展示多条件映射规则:
library(dplyr)

Arthritis <- Arthritis %>%
  mutate(
    Treatment = case_when(Treatment == "Treated" ~ 1, TRUE ~ 0),
    Sex = case_when(Sex == "Male" ~ 1, TRUE ~ 0),
    Improved = case_when(
      Improved == "None" ~ 0,
      Improved == "Some" ~ 1,
      Improved == "Marked" ~ 2
    )
  )

小提示:如果你的分类列本身是有序因子,直接调用as.integer()就可以得到对应水平的数值,不需要额外设置映射。

内容的提问来源于stack exchange,提问作者Eisen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:39:01