r - 如何将多个二进制转换为分类
问题描述
我想根据二进制列的行名将多个二进制列转换为具有分类内容的一列。我曾尝试在其他问题中使用此论坛中的代码,但由于我的情况不同,有些行没有条目,我没有设法找到有效的解决方案。dplyr
我的数据集上提出的解决方案很慢。我的数据集有超过 2 个 Mio 行。
这是数据
m <- matrix(0,10,10)
colnames(m) <- c("a","b","c","d","e","f","g","h","i","j")
m[3,2] <- 1
m[4,8] <- 1
m[5,8] <- 1
m[6,1] <- 1
看起来像这样
a b c d e f g h i j
[1,] 0 0 0 0 0 0 0 0 0 0
[2,] 0 0 0 0 0 0 0 0 0 0
[3,] 0 1 0 0 0 0 0 0 0 0
[4,] 0 0 0 0 0 0 0 1 0 0
[5,] 0 0 0 0 0 0 0 1 0 0
[6,] 1 0 0 0 0 0 0 0 0 0
[7,] 0 0 0 1 0 0 0 0 0 0
[8,] 0 0 0 0 0 0 0 0 0 0
[9,] 0 0 0 0 0 0 0 0 0 0
[10,] 0 0 0 0 0 0 0 0 0 0
我想得到
colname
[1,] ""
[2,] ""
[3,] "b"
[4,] "h"
[5,] "h"
[6,] "a"
[7,] "d"
[8,] ""
[9,] ""
[10,] ""
解决方案
另一种使用方法max.col
是获取每行中最大元素的索引,指定ties.method = "first"
并获取相应的列名。然后,我们可以将列名称替换为空白,其返回max.col
值为 1(第一列)但在 的第一列中没有 1 m
。
cols <- max.col(m, ties.method = "first")
vec <- colnames(m)[cols]
vec[cols == 1 & m[, 1] != 1] <- ''
#[1] "" "" "b" "h" "h" "a" "" "" "" ""
推荐阅读
- python - Django:错误:“重复键值违反唯一约束”
- python - 如何在不使用 pandas 之类的库的情况下在 Python 中拆分列表?
- python - 在python中从.tex转换为pdf时找不到文件现有文件
- python - 检查特定 venv 的后台是否有当前 pip 安装
- node.js - 动态导入 100 个 .ts 文件
- java - 如果第一个 url 返回响应状态代码 200,如何使用 Jsoup 获取最终重定向的 url
- html - 向图像添加覆盖背景未正确响应
- kotlin - 可以使用冗余/嵌套的 withContext 调用吗?
- firebase - Cloud Firestore 触发器“您的触发器必须始终指向文档”
- python-3.x - 如何避免在python函数中写入文件