R:使用 dcast 时包含没有条目的因子

2024-06-26

我在数据帧上使用 reshape2 函数 dcast 。其中一个变量是某些级别未出现在数据框中的因素,但我会将所有值包含在创建的新列中。

例如,假设我运行以下命令

library(reshape2)
dataDF <- data.frame(
  id = 1:6,
  id2 = c(1,2,3,1,2,3),
  x = c(rep('t1', 3), rep('t2', 3)),
  y = factor(c('A', 'B', 'A', 'B', 'B', 'C'), levels = c('A', 'B', 'C', 'D')),
  value = rep(1)
)

dcast(dataDF, id + id2 ~ x + y, fill = 0)

我得到以下内容

  id id2 t1_A t1_B t2_B t2_C
1  1   1    1    0    0    0
2  2   2    0    1    0    0
3  3   3    1    0    0    0
4  4   1    0    0    1    0
5  5   2    0    0    1    0
6  6   3    0    0    0    1

但我还想包括列 t1_C、t1_D、t2_A 和 t2_D 全部为 0

即我想要以下内容

  id id2 t1_A t1_B t1_C t1_D t2_A t2_B t2_C t2_D
1  1   1    1    0    0    0    0    0    0    0
2  2   2    0    1    0    0    0    0    0    0
3  3   3    1    0    0    0    0    0    0    0
4  4   1    0    0    0    0    0    1    0    0
5  5   2    0    0    0    0    0    1    0    0
6  6   3    0    0    0    0    0    0    1    0

另外,作为辅助,是否可以在初始数据帧中的“值”列不充满的情况下创建上述内容。基本上只想将 x 和 y 投射到它们自己的列中,如果它们存在于该 id 中,则将其转换为 1。

提前致谢

编辑: 最初 LHS 上有一个变量,杰里米在下面回答,但实际上 LHS 上有多个变量,因此编辑了问题以反映这一点


尝试添加drop = FALSE到您的 dcast 调用,以便不会删除未使用的因子级别:

dcast(dataDF, id ~ x + y, fill = 0, drop = FALSE)

  id t1_A t1_B t1_C t1_D t2_A t2_B t2_C t2_D
1  1    1    0    0    0    0    0    0    0
2  2    0    1    0    0    0    0    0    0
3  3    1    0    0    0    0    0    0    0
4  4    0    0    0    0    0    1    0    0
5  5    0    0    0    0    0    1    0    0
6  6    0    0    0    0    0    0    1    0

就你而言,是的,我们只需要告诉dcast你想要使用函数来做什么aggregate,在这种情况下你想要length:

data2 <- dataDF[,1:3]
dcast(data2, id ~ x + y, fill = 0, drop = FALSE, fun.aggregate = length)

对于您的编辑,我会使用tidyr and dplyr而不是reshape2:

library(tidyr)
library(dplyr)

dataDF %>% left_join(expand.grid(x = levels(dataDF$x), y = levels(dataDF$y)), .) %>%
           unite(z, x, y) %>%
           spread(z, value, fill = 0) %>%
           na.omit

首先我们使用以下方法完成 x 和 y 的所有组合expand.grid并合并,然后我们unite将它们分成一列 z,然后我们spread将它们删除,然后从 id 列中删除 NA:

  id id2 t1_A t1_B t1_C t1_D t2_A t2_B t2_C t2_D
1  1   1    1    0    0    0    0    0    0    0
2  2   2    0    1    0    0    0    0    0    0
3  3   3    1    0    0    0    0    0    0    0
4  4   1    0    0    0    0    0    1    0    0
5  5   2    0    0    0    0    0    1    0    0
6  6   3    0    0    0    0    0    0    1    0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R:使用 dcast 时包含没有条目的因子 的相关文章

  • R/ggplot2:如何匹配重叠区域图中的图例和绘图颜色?

    我有两个面积图 称为 蓝色 和 绿色 其中green大部分是在blue情节 但在极少数点上 它高于blue阴谋 我想使用透明度说alpha 0 2对于两者 并且还能够为每个指定颜色 我现在的问题是 自从green情节主要是在blue地块 其
  • 在ggplot2中添加水平线到绘图和图例

    这段代码创建了一个漂亮的图 但我想在 y 50 处添加一条水平黑线 并让图例显示一条黑线 并在图例中显示文本 cutoff 但在图例中保留源点 我可以使用 geom line 添加该行 但无法在图例中获取该行 library ggplot2
  • 如何将带有几行代码的字符数组转换为 data.frame?

    我有以下数组 my list lt c Jan 01 Dec 31 00 00 24 00 Jan 01 Jun 30 12 00 18 00 Jul 06 Dec 31 09 00 19 00 导致以下结果的最短代码是什么 x1 x2 x
  • 用于检查和批量线性模型的数据表选项

    我想知道是否有data table用于从数据集中批量处理线性模型并首先进行检查的选项 我需要对每个唯一标识符运行一堆线性模型 但首先我需要进行检查 对于每个唯一的 id 和年份 我需要检查是否有至少 24 个月的先前每月数据 但不超过 60
  • 如何按组计算日期之间的时间差

    我有一个包含日期 时间和位置的数据框 我想计算组内记录与上一条记录 根据日期排列 之间的分钟差异 并变异为新列 我已经弄清楚如何使用循环来完成此操作 但这仅适用于所有组 位置 而且我不确定如何按组执行此操作 fake data set fo
  • 以对数刻度绘制较长的 y 轴刻度,刻度向外

    我之前有一篇关于在特定 y 轴值处绘制较长刻度的文章 在特定 y 轴值处绘制较长的刻度 https stackoverflow com questions 51335424 plotting longer ticks at particul
  • 通过 R 中的方向矩阵进行回溯

    我有一个这样的矩阵 https i stack imgur com mzeRI png https i stack imgur com mzeRI png 你可以像这样加载它 matrix structure c C G C A 0 V V
  • 如何使用R在csv文件中按列添加数据?

    我有向量中包含的信息 例如 sequence1 lt seq 1 20 sequence2 lt seq 21 40 我想将该数据附加到文件中 所以我使用 write table sequence1 file test csv sep ap
  • 使用 R 绘图将目录添加到 PDF

    我正在 R 中创建大量绘图并将它们保存为 PDF 使用 grDevices pdf 有没有一种简单的方法可以在创建 PDF 时将 元数据 目录添加到 PDF 中 我并不是想添加一个单独的页面 而是添加一个 TOC 像 Preview app
  • 库存推文、文本挖掘、表情符号错误

    我希望您能够协助进行文本挖掘练习 我对 AAPL 推文感兴趣 并且能够从 API 中提取 500 条推文 我自己克服了几个障碍 但最后一部分需要帮助 由于某种原因 tm 包没有删除停用词 您能看一下可能是什么问题吗 表情符号会引起问题吗 绘
  • 使用 data.table::fwrite() 写入 .txt 文件 — is.list(x) 不为 TRUE

    我试图替换基本 R 函数write table with data table fwrite 加快写入速度 但该函数抱怨说is list x is not TRUE 我提供的输入有什么问题fwrite 期望 但是write table 默默
  • R 中的离散化

    有谁知道有一个包可以实现连续变量离散化的监督学习算法 dprep 包包含类似的功能 但该包已被弃用 有任何想法吗 感谢您的帮助 您仍然可以使用dprep包 但你必须从源代码安装它 我刚刚测试过 它运行良好 不过 您或许可以看看离散化 htt
  • R ggplot结合颜色图例和不同因子长度的填充

    我正在使用不完整因子设计的数据绘制图表 由于设计的原因 我的颜色手动比例和填充手动比例的长度不同 因此 我得到了两个传说 我怎样才能删除其中之一或者更好地将它们组合起来 我看过这些问题 合并单独的大小并填充 ggplot 中的图例 http
  • 如何根据子字符串匹配选择 R data.table 行(类似于 SQL)

    我有一个带有字符列的 data table 并且只想选择其中包含子字符串的行 相当于SQLWHERE x LIKE substring E g gt Months data table Name month name Number 1 12
  • igraph - 将文本添加到社区图

    使用下面的代码 我可以在 igraph 提供的 空手道俱乐部 示例中生成社区图 请参见第一张图片 library igraph karate lt make graph Zachary wc lt cluster walktrap kara
  • R 数据框中的重复行

    我正在尝试使用下面的代码复制数据框中的行 但是 我发现它很慢 duprow df 1 for i in 1 2000 print i df rbind df duprow 有更快的方法吗 您可以使用rep 例如对于数据框第 1 行的 5 个
  • 我们可以有更多错误(消息)吗?

    在 R 中 如果函数使用变量 有没有办法弹出错误消息 未在函数体内声明 即我希望有人标记这种类型的函数 aha lt function p return p n 看 如果某个地方碰巧有一个 n 变量 aha p 2 会给我一个 答案 因为
  • 通过环境.yml 文件使用 conda 安装 R 包

    通常我会创建 conda 环境 例如 conda env create f environment yml conda activate env name 通常我使用 Python 工作 典型的environment yml简单的文件可能看
  • 合并结果的行数多于一个数据框

    我有两个数据框 第一个包含 9994 行 第二个包含 60431 行 我想合并两个数据框 以便合并后的数据框包含两个数据框的组合列 但只包含 9994 行 但是 合并后我得到了超过 9994 行 我怎样才能确保这种情况不会发生 df1 re
  • 使用 R 中的剪切函数对缺失值进行 NA 级别[重复]

    这个问题在这里已经有答案了 R 中的 cut 函数省略了 NA 但我想要一个缺失值的级别 这是我的 MWE set seed 12345 Y lt c rnorm n 50 mean 500 sd 1 NA Y1 lt cut log Y

随机推荐

  • 如何仅在客户端渲染 NextJS 13 中的组件

    我目前正在开发一个项目 该项目要求我的组件对客户端频繁变化的条件做出反应 但据我所知 NextJS 13 似乎强制服务器端渲染 我尝试使用动态加载import dynamic from next dynamic and const Comp
  • 克隆在幕后是如何工作的?

    克隆不会调用对象构造函数来创建对象的副本 那么clone使用什么算法呢 我正在寻找本机方法克隆的实现细节 任何指示将不胜感激 请注意 我知道克隆的缺点 protected native Object clone 我不太清楚 我需要查看本机代
  • VS2015 代码覆盖率不适用于 ASP.NET Core 1.0(以前称为 ASP.NET 5)中的测试

    我有一个 ASP NET Core 1 0 以前称为 ASP NET 5 解决方案 其中包含几个类库 包 和一个 ASP NET MVC6 项目 我有一个使用支持 Core 1 0 的新 XUnit 2 0 的测试库 然而 由于某种原因 当
  • 为什么纯虚拟析构函数的实现必须为空?它应该是内联的吗?

    我在其他线程中读到 当您实现纯虚拟析构函数 是的 它可以有一个实现 时 它必须是空的 并且应该 是内联的 应该是空的吗 如果是这样 为什么 应该内联吗 如果是这样 为什么 编辑 这就是纯虚拟析构函数的实现方式 class A virtual
  • Jackson 库代码中出现错误

    我们使用 dropwizard 版本 0 6 3 当我们尝试升级版本 0 7 0 时 我们在服务启动时收到此错误 线程 主 java lang VerifyError中的异常 类com fasterxml jackson module af
  • @deprecated 的 mergeLatest 重构 - 不再支持 resultSelector,而是通过管道传输到映射吗?

    角度材料文档应用程序包含以下代码片段 Combine params from all of the path into a single object this params combineLatest this route pathFro
  • 我应该将 TeamCity 的 VCS 根指向哪里?

    我正在设置 TeamCity 我想知道应该使用什么作为 VCS 根 我的 svn 存储库位于http obfuscatedserver svn main MyProject1 http obfuscatedserver svn main M
  • 无法为从图中加载的张量变量赋值

    我已经训练了一个模型并保存了它 现在 我试图了解权重扰动如何影响其准确性 因此我需要修改权重变量中保存的值 本质上会为其添加一些噪声 问题是加载它们后我无法为它们分配值 我正在使用 TensorFlow 版本 1 2 1 来训练和加载模型
  • Elm - 将消息转换为 Cmd 消息

    我正在尝试修改一个简单的应用程序elm lang 教程 https guide elm lang org architecture effects http html首先更新模型 然后触发另一次更新 update msg model cas
  • 如何看到Visual Studio 2008构建命令行?

    当我在 Visual Studio 中时 我按 F5 进行构建 有没有办法查看 MSBUILD 命令行正在执行 在 Visual Build Pro 内部 构建失败 但从 Visual Studio 2008 运行 按 F5 时 构建成功
  • nodejs module.js:340 错误: 找不到模块

    我将nodejs安装在C Program Files x86 nodejs 然后我创建了一个 js 文件并将其保存在桌面中 以便在控制台中输出 hello world console log hello world 当我尝试从命令提示符运行
  • iOS:如何使用 CGLayer 支持 Retina 显示屏?

    我正在 CALayer 的委托方法中绘制图表drawLayer inContext 现在我想支持 Retina Display 因为图形在最新设备上看起来很模糊 对于直接在 CALayer 传递的图形上下文上绘制的部分 我可以通过如下设置
  • PHP最左边的数字

    假设我有一个包含整数或浮点数的变量 因为在 PHP 中整数可能会溢出到浮点数 我想运行一些操作来获取最左边的数字和其余的剩余数字 为了更好地解释 现在 我知道如果将数字表示为字符串 有多种方法可以做到这一点 但我试图避免将其类型转换为字符串
  • JDK 11/JavaFX:如何在没有构建/依赖管理的情况下制作胖罐子?

    我认为不用说 我应该能够使用 Oracle 自己的 JDK 和 JavaFX 来自 gluonhq 来构建用户可以使用的可分发 jar 文件 经过详尽的搜索 大量阅读 过去几个月 24 小时或更长时间 最后是这个 Google 搜索查询 h
  • 为什么这个 IA32 汇编代码有 3 个 leaal 指令?

    我编译了这个C函数 int calc int x int y int z return x 3 y 19 z 我在 calc s 中得到了这个 我正在注释正在发生的事情 file calc c text globl calc type ca
  • 如何在 asp:TextBox 的 keyup 事件上调用 javascript 函数

    如何在asp net的TextBox控件的keyup事件上调用javascript函数 我正在尝试类似的事情 但它不起作用
  • jq:从嵌套对象中选择键的子集

    Input success true results a b c 鉴于我想保留所需的输出b success true results b 我尝试过的事情 jq del select results b not success true re
  • 使用vim,如何快速刷新正在处理的网页?

    我已经使用 VIM 几个星期了 同时处理各种网络语言 我真的很喜欢它 我发现必须点击或单击浏览器并刷新页面才能看到代码更改的效果 这很麻烦 更烦人的是 因为我使用的是 Virtual Box 而且我倾向于在主机系统上处理 PDF 文件 因此
  • 具有负值的条形图

    我需要创建一个可以有负值的 d3 条形图 理想情况下 零轴位置应根据数据的范围来计算 但我会选择一个假设对称正负范围的解决方案 即它始终位于图表的中间 这是我想要实现的目标的示例 好吧 假设您有一个数字数组作为数据集 其中包括一些正值和负值
  • R:使用 dcast 时包含没有条目的因子

    我在数据帧上使用 reshape2 函数 dcast 其中一个变量是某些级别未出现在数据框中的因素 但我会将所有值包含在创建的新列中 例如 假设我运行以下命令 library reshape2 dataDF lt data frame id