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

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(使用前将#替换为@)

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

  • 闭包作为数据合并习惯的解决方案

    我正在尝试解决闭包问题 而且我think我发现了一个案例 他们可能会有所帮助 我有以下几部分需要处理 一组正则表达式 旨在清理状态名称 位于函数中 具有州名称 上述函数创建的标准化形式 和州 ID 代码的 data frame 用于链接两者
  • 在 ifelse() 语句内部和外部运行一行时的不同输出

    我正在尝试运行一个简单的命令 但不知道为什么在内部和外部运行它时输出不同ifelse 功能 函数条件评估为FALSE 所以输出应该完全相同 但是 单独运行时 输出为0 0 1 1 0 1 0 1 NA 根据需要 但是从ifelse 函数 输
  • 如何使用 dplyr 独立过滤每列的行

    我有以下内容 library tidyverse df lt tibble tribble gene colB colC a 1 2 b 2 3 c 3 4 d 1 1 df gt A tibble 4 x 3 gt gene colB c
  • 如何更改ggplot2中x轴和y轴的位置

    在我的真实研究世界中 在顶部 或顶部和底部 显示 x 轴 在右侧显示 y 轴是很常见的 然而 ggplot2 中的默认位置是 x 位于底部 y 位于左侧 下列的科斯克在这里发帖 https groups google com forum f
  • 将逗号类分配给数据框中的多个列

    我有一个data frame有几个数字列我要 就像分配 逗号 类一样 这是需要的 因为我有一个中央数据框 我使用 Openxlsx 包过滤并保存到 Excel 并且需要comma类 以便数据在excel中显示为逗号格式 这是数据框 set
  • 在 R 中绘制逻辑回归的两条曲线

    我正在 R glm 中运行逻辑回归 然后我设法绘制结果 我的代码如下 temperature glm glm Response Temperature data mydata family binomial plot mydata Temp
  • dplyr 将字符串拆分为逗号分隔的列表

    我正在尝试使用 dplyr 将字符串拆分为逗号分隔的字符串 但运气不佳 dat lt data frame key 1 4 labels c a ab abc b 我试图将标签列设置为 c a a b a b c b 我已经尝试了以下所有变
  • 使用 R 将我的 shapefile 数据投影到传单地图上

    我 在 Win7 上 试图获取我的 shapefile 数据 Here https www dropbox com s f3d46itleoozzjz shapefiles zip dl 0是数据文件 要使用显示leaflet包裹 但没有任
  • 将数字提高到非整数幂时出现奇怪的 NaN [重复]

    这个问题在这里已经有答案了 我执行了以下代码 tau lt 0 25 h lt 0 6 n 1 5 4 5 dnorm qnorm tau 4 qnorm tau 2 qnorm tau 2 1 2 1 5 R 继续生产NaN 然而 R 实
  • 什么时候在“strsplit”中设置“perl=TRUE”不起作用(按预期或根本不起作用)?

    我只是在尝试优化一些代码时做了一些基准测试并观察到strsplit with perl TRUE is faster比跑步strsplit with perl FALSE 例如 set seed 1 ff lt function paste
  • R闪亮数据表在开始时不显示记录(行)

    我正在构建一个带有数据表的闪亮应用程序 我想要的是启动时不显示任何记录 行 这样您只能看到表格顶部的过滤器 当您开始输入时 会显示行 我在数据表中找不到选项 这可能吗 下面是示例代码 shinyApp ui navbarPage title
  • dplyr / left_join 中的嵌套管链

    在尝试获取分组滞后变量的过程中 仅使用这是不可能的 lag 建议的解决方案是将数据拉出 滞后不同的行 然后重新加入它 我更喜欢在不创建中间对象的情况下执行此操作 并且希望在链中间执行此操作 然而 它似乎没有像我预期的那样工作 问题似乎是使用
  • 可以明确声明包依赖项的版本吗?

    我倾向于对我编写的代码进行明确而不是隐含的描述 因此 在成功创建自己的包之后 我立即想到的下一件事是如何最好地确保代码的健壮性和可靠性 其中一部分与我的包所依赖的包有关 实际问题 在这方面 是否可以明确声明需要 期望哪个版本的包依赖项 我正
  • 指定 R 中 hist() 中的 bin 数量?

    我尝试指定垃圾箱的数量hist R为10 如下 gt hist x breaks 10 但垃圾箱的数量并不完全是 10 我尝试了几个其他数量的垃圾箱 结果发生了同样的情况 hist says breaks可以指定 给出直方图单元格数量的单个
  • 如何生成向量的所有组合[重复]

    这个问题在这里已经有答案了 假设我有 3 个绿球 2 个橙球和 8 个黄球 我想订购它们 鉴于所有相同颜色的球都是相同的 如何生成所有可能的序列 在 R 中 使用gregmisc 我可以 balls lt c orange orange g
  • R从列表中提取数据框,列名中没有前缀

    我在列表中放置了一个数据框 然后 当尝试将其提取回来时 我得到了该数据帧的所有以列表键为前缀的列名称 有没有办法完全按照最初传递的方式提取数据帧 cols lt c column1 Column2 Column3 df1 lt data f
  • 将 JSON URL 转换为 R 数据帧

    我在将 JSON 文件 从 API 转换为 R 中的数据帧时遇到问题 例如 URL 我尝试了 S O 的一些不同建议 包括将json数据转换为R中的数据框 https stackoverflow com questions 28683769
  • 使用底格里斯河从纬度/经度获取人口普查区

    我有相对较多的坐标 我想获取其人口普查区 除了 FIPS 代码 我知道我可以使用以下命令查找各个纬度 经度对call geolocator latlon 已完成here https stackoverflow com questions 5
  • 将列表中的列转换为 R 中的数据框

    我有使用 R 创建的以下列表 set seed 326581 X1 rnorm 10 0 1 Y1 rnorm 10 0 2 data data frame X1 Y1 lst lt replicate 100 df smpl lt dat
  • 错误:“rjags”的包或命名空间加载失败

    在终端的 conda 环境之一中 我能够成功安装包 rjags 但是 当我在该环境中运行 R 并运行库 rjags 时 出现以下错误 加载所需的包 coda 错误 rjags 的包或命名空间加载失败 rjags 的 loadNamespac

随机推荐

  • 创建自定义活动设计而不参考 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 这是我的意