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

如何用R将多分类问题转换为少分类问题(以8类转4类为例)

在R中高效实现多分类转少分类

一、等间隔批量合并(适合8转4、32转8这类规则场景)

如果是每n个连续类别合并为一个新类别,用整数除法或cut()函数最省心,不用逐个写判断:

示例1:8类转4类(每2个一组)

library(dplyr)

# 假设数据集为df,响应变量Y是1-8的数值型
# 方法1:整数除法生成分组编号,再映射标签
df <- df %>% 
  mutate(
    new_Y_num = (Y + 1) %/% 2,  # 得到1-4的分组编号
    new_Y_label = c("I", "II", "III", "IV")[new_Y_num]
  )

# 方法2:用cut()直接生成带标签的分组
df <- df %>% 
  mutate(new_Y_label = cut(Y, breaks = seq(0, 8, by = 2), labels = c("I", "II", "III", "IV")))

示例2:32类转8类(每4个一组)

# 整数除法方式
df <- df %>% 
  mutate(
    new_Y_num = (Y + 3) %/% 4,  # 得到1-8的分组编号
    new_Y_label = paste0("Class_", new_Y_num)
  )

# cut()方式
df <- df %>% 
  mutate(new_Y_label = cut(Y, breaks = seq(0, 32, by = 4), labels = paste0("Class_", 1:8)))

二、自定义非等间隔分组

如果分组规则不是连续等间隔,用dplyr::recode()定义映射表,比逐个ifelse或case_when更简洁:

# 定义映射规则:键是原类别,值是新类别
y_map <- c(
  "1" = "I", "2" = "I",
  "3" = "II", "4" = "II",
  "5" = "III", "6" = "III",
  "7" = "IV", "8" = "IV"
)

# 替换原Y列
df <- df %>% mutate(new_Y = recode(Y, !!!y_map))

关键优势

  • 批量分组场景:整数除法/cut()一行代码搞定,无需重复写判断逻辑;
  • 自定义分组场景:映射表清晰易维护,修改规则只需调整向量,不用改代码结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:05:21