从多个因子列生成虚拟矩阵

2024-03-03

我已经在网上搜索过,但没有找到答案。我有一个包含多列的大 data.frame 。每列都是一个因子变量。

我想转换 data.frame ,使得因子变量的每个可能值都是一个变量,如果该变量存在于因子列中,则该变量包含“1”,否则包含“0”。

这是我的意思的一个例子。

labels <- c("1", "2", "3", "4", "5", "6", "7") 

#create data frame (note, not all factor levels have to be in the columns,
#NA values are possible)
input <- data.frame(ID = c(1, 2, 3), 
Cat1 = factor(c( 4, 1, 1), levels = labels), 
Cat2 = factor(c(2, NA, 4), levels = labels),
Cat3 = factor(c(7, NA, NA), levels = labels))

#the seven factor levels now are the variables of the data.frame
desired_output <- data.frame(ID = c(1, 2, 3),
Dummy1 = c(0, 1, 1),
Dummy2 = c(1, 0, 0),
Dummy3 = c(0, 0, 0),
Dummy4 = c(1, 0, 1),
Dummy5 = c(0, 0, 0),
Dummy6 = c(0, 0, 0),
Dummy7 = c(1, 0, 0))

input
ID Cat1 Cat2 Cat3
1    4    2    7
2    1 <NA> <NA>
3    1    4 <NA>

desired_output
ID Dummy1 Dummy2 Dummy3 Dummy4 Dummy5 Dummy6 Dummy7
1      0      1      0      1      0      0      1
2      1      0      0      0      0      0      0
3      1      0      0      1      0      0      0

我的实际 data.frame 有 3000 多行和 100 多个级别的因素。 我希望你能帮助我将输入转换为所需的输出。

问候 苏什


几种方法,即兴发挥格雷戈尔和亚伦的答案。

来自亚伦的。factorsAsStrings=FALSE使用时保留因子变量,因此所有实验室dcast

library(reshape2)
dcast(melt(input, id="ID", factorsAsStrings=FALSE), ID ~ value, drop=FALSE) 
  ID 1 2 3 4 5 6 7 NA
1  1 0 1 0 1 0 0 1  0
2  2 1 0 0 0 0 0 0  2
3  3 1 0 0 1 0 0 0  1

然后你只需要删除最后一列。

来自格雷戈尔的

na.replace <- function(x) replace(x, is.na(x), 0)
options(na.action='na.pass') # this keeps the NA's which are then converted to zero
Reduce("+", lapply(input[-1], function(x) na.replace(model.matrix(~ 0 + x))))
  x1 x2 x3 x4 x5 x6 x7
1  0  1  0  1  0  0  1
2  1  0  0  0  0  0  0
3  1  0  0  1  0  0  0

那么你只需要cbind the ID column

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从多个因子列生成虚拟矩阵 的相关文章

随机推荐

  • 创建自定义活动设计而不参考 Windows Workflow Foundation 中的设计 DLL

    我在用Windows 工作流基础 with 定制活动 我想创建定制设计对于我的工作流程中的这些活动 我能够制作设计项目和设计师xaml 我还可以在工作流程中看到它们的定制设计 如果我直接在我的工作流程项目中引用设计项目 这是我不想做的事情
  • Lombok 访问 jdk.compiler 的内部包与 Java-16 不兼容

    只需将我的一个项目从 Java 15 升级到 16 使用最新版本 here https jdk java net 16 在编译使用 lombok 的项目时 例如
  • 如何同步返回异步 Future 中计算的值?

    我正在尝试使用 hyper 来获取 HTML 页面的内容 并希望同步返回 future 的输出 我意识到我可以选择一个更好的例子 因为同步 HTTP 请求已经存在 但我更感兴趣的是了解我们是否可以从异步计算中返回一个值 extern cra
  • Google BigQuery 查询速度很慢

    我正在使用 Google BigQuery 并且正在从 PHP 执行一些简单的查询 例如 SELECT from emails WHERE email mail test com 我只是检查该电子邮件是否存在于表中 表 emails 目前为
  • ReactJS错误警告

    我正在使用 ReactJS 创建我的第一个应用程序 当我运行代码时发现此警告 警告 表单 propType 失败 您提供了checked支持表单 场没有onChange处理程序 这将呈现只读 场地 如果该字段应该是可变的 请使用defaul
  • 将按钮和文本放在同一行,并将文本置于按钮的中心

  • 材质 UI 选择字段多选

    我多次尝试了文档中给出的示例 但它对我来说效果不佳 谁能帮我 这是代码 import React Component from react import SelectField from material ui SelectField im
  • 为什么裸存储库有 HEAD

    我想知道这样做的目的是什么HEAD在裸存储库中 是否仅在克隆存储库时使用它来知道在克隆存储库中签出哪个分支 请注意 这个问题不是关于what is HEAD 但考虑到它的功能 我想知道为什么里面需要它bare存储库 您能举出一个在裸存储库中
  • 从 XML 文件生成 Java 类

    如何从 xml 文件获取 java 类 在这种情况下 我没有XML模式据我所知 这样我就不能使用 JAXB Castor 或其他 xml 绑定 API 您可以使用以下方法从 XML 文件生成架构某些工具 http oreilly com p
  • 变量应该是侦听器内部的最终变量[重复]

    这个问题在这里已经有答案了 可能的重复 无法引用在不同方法中定义的内部类内的非最终变量 https stackoverflow com questions 1299837 cannot refer to a non final variab
  • 在Force布局中向d3节点添加文本标签

    这是我的代码 你也可以有完整的代码JsFiddle https jsfiddle net ShuanWu 7pvhxfzg 我想在每个节点上都有标签 但我不能 顺便说一句 标签可以嵌入到圆圈中console https i stack im
  • 根据选项卡内容调整 QTabWidget 大小的问题(PyQT)

    我知道提供了一些关于 QTabWidget 调整大小的答案 Link 1 https stackoverflow com questions 28710003 force qt pyqt pyside qtabwidget to resiz
  • TextRenderer.MeasureText 结果的准确性

    调用 TextRenderer MeasureText 如下 TextRenderer MeasureText myControl Text myControl Font 并将结果与 控件的大小进行比较以检查文本是否适合 结果有时不正确 观
  • 使用 JavaScript 和 Google Gears 处理文件上传,有更好的解决方案吗?

    所以 我已经使用这种文件上传方法一段时间了 但 Google Gears 对实现 HTML5 规范的较新浏览器的支持似乎很差 我听说过这个词已弃用 https stackoverflow com questions 2292160浮动在几个
  • 使用 Pyspark 从关系数据集构建层次结构

    我是 Python 新手 一直致力于从关系数据集构建层次结构 如果有人知道如何进行此操作 那将有巨大的帮助 我有一个关系数据集 其中包含如下数据 currentnode childnode root child1 child1 leaf2
  • Symfony2 表单中实体字段类型的附加属性

    在Symfony2中 有没有一种方法可以将更多字段从实体映射到从基于实体的表单生成的选择下拉列表的选项标签 我目前有类似的东西 builder gt add creditcard entity array label gt Credit C
  • 如何正确地将 C 程序拆分为文件并包含?

    我组织了我的程序 将每个实体拆分在自己的文件中 是这样的 main c include student h include subject h include classroom h define PI 3 14 int sum int a
  • 将音频从 Android 设备流式传输到另一设备

    我如何通过互联网将音频从一台设备流式传输到另一台设备 我知道使用 Java 套接字发送基本数据 但想知道如何 在文件中途开始流式传输 例如 在歌曲的中间 发送的数据需要什么格式 MediaPlayer可以将url作为数据源 那么音频从服务器
  • 将光标移动到输入字段的开头?

    当您在 Stackoverflow 中点击 提问 时 您会看到一条文字 您的编程问题是什么 请描述一下 我想要同样的事情 我所需要做的就是将光标移动到文本字段的开头 我如何用 jquery 做到这一点 这可能有点过分了 但这些函数对于选择输
  • 从多个因子列生成虚拟矩阵

    我已经在网上搜索过 但没有找到答案 我有一个包含多列的大 data frame 每列都是一个因子变量 我想转换 data frame 使得因子变量的每个可能值都是一个变量 如果该变量存在于因子列中 则该变量包含 1 否则包含 0 这是我的意