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

如何在R中快速将模型预测的哑变量矩阵转为标签向量?

在R中将哑变量矩阵转换为标签向量(用于构建混淆矩阵)

你需要把每行仅含一个1的哑变量矩阵转换为对应列名的标签向量,无需用for循环,以下是几种高效简便的实现方式:

先构造示例矩阵

dummy_mat <- matrix(
  c(1,0,0,0,0,0,0,
    0,1,0,0,0,0,0,
    0,0,0,1,0,0,0,
    0,0,0,1,0,0,0,
    0,0,0,0,0,0,1,
    0,0,0,0,0,1,0),
  nrow = 6, byrow = TRUE,
  dimnames = list(c(196,203,239,240,252,253),
                  c("Africa","America","CentralAsiaSiberia","EastAsia","Oceania","SouthAsia","WestEurasia"))
)

方法1:max.col()(最简洁高效)

利用max.col()直接定位每行最大值(即值为1的位置),再匹配列名:

label_vec <- colnames(dummy_mat)[max.col(dummy_mat)]

输出结果:

label_vec
#> [1] "Africa"      "America"     "EastAsia"    "EastAsia"    "WestEurasia" "SouthAsia"

方法2:apply()逐行处理

逻辑更直观,逐行筛选值为1的列对应的列名:

label_vec <- apply(dummy_mat, 1, function(x) colnames(dummy_mat)[x == 1])

方法3:tidyverse 重塑数据

如果习惯tidyverse工作流,可以通过数据重塑实现:

library(tidyverse)

label_vec <- dummy_mat %>%
  as.data.frame() %>%
  rownames_to_column("id") %>%
  pivot_longer(-id, names_to = "label", values_to = "value") %>%
  filter(value == 1) %>%
  pull(label)

这些方法都是R的向量化操作,效率远高于for循环,其中max.col()是性能最优的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:10:26