数据重塑的 R 性能

2024-01-31

我正在尝试在 R 中重塑数据框,但使用推荐的方法似乎有问题。数据帧具有以下结构:

ID                     DATE1             DATE2            VALTYPE        VALUE
'abcd1233'         2009-11-12        2009-12-23           'TYPE1'        123.45
...

VALTYPE是一个字符串,是一个只有 2 个值的因子(比如TYPE1 and TYPE2)。我需要根据通用 ID 和日期将其转换为以下数据框(“宽”转置):

ID                     DATE1             DATE2            VALUE.TYPE1  VALUE.TYPE2
'abcd1233'             2009-11-12        2009-12-23       123.45           NA
...

该数据框有超过 4,500,000 个观测值(尽管大约 70%VALUEs are NA)。该机器是基于 Intel 的 Linux 工作站,具有 4Gb RAM。将数据(从压缩的 Rdata 文件)加载到新的 R 进程中会使其增长到大约 250Mb,这显然为重塑留下了大量空间。

到目前为止,这些是我的经历:

  • 使用香草reshape() method:

    tbl2

RESULT: Error: cannot allocate vector of size 4.8 Gb

  • Using cast()的方法reshape包裹:

    tbl2

结果:R 进程消耗了所有 RAM,而且看不到尽头。最终不得不终止该进程。

  • Using by() and merge():

    sp

结果:工作正常,尽管这不是很优雅和万无一失(即,如果添加更多类型,它会崩溃)。

雪上加霜的是,所讨论的操作可以通过大约 3 行 AWK 或 Perl 轻松实现(并且几乎不使用任何 RAM)。所以问题是:在 R 中使用推荐方法执行此操作而不消耗所有可用 RAM 的更好方法是什么?


一个有用的技巧是将 id 变量组合成一个字符向量,然后进行重塑。

tbl$NEWID <- with(tbl, paste(ID, DATE1, DATE2, sep=";"))
tbl2 <- recast(tbl2, NEWID ~ VALTYPE, measure.var="VALUE")

在我的 intel core2 duo 2.2ghz macbook 上解决类似大小的问题时,速度快了大约 40%。

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

数据重塑的 R 性能 的相关文章

  • 尝试使用 movie3d 制作 3D PCA 图(rgl)的电影

    我已经使用 pca3d 包在 R 中制作了 rgl 3D PCA 图 并且我正在尝试使用 movie3d 制作一个包含旋转图电影的 gif 文件 pca3d 包 makeMoviePCA 中有一个函数 它将其参数传递给 movie3d 这是
  • data.table 相当于 dplyr::filter_at

    考虑数据 library data table library magrittr vec1 lt c Iron Copper vec2 lt c Defective Passed Error set seed 123 a1 lt sampl
  • 在两个向量之间交换元素(交叉)

    假设我有 chromosome 1 lt c 0010000001010000 chromosome 2 lt c 0100000001001010 我该如何实施step 3 5 Evaluate NC1 否 中 1 个chromosome
  • 使用 R 将图例添加到绘图中

    我使用 R 在一个图中创建了 4 条线 这是代码 Define 2 vectors cars lt c 123 07 110 51 96 14 98 71 101 3 trucks lt c 110 31 89 91 89 81 89 31
  • Android:了解 OnDrawFrame、FPS 和 VSync (OpenGL ES 2.0)

    一段时间以来 我在 Android 游戏中遇到了运动精灵间歇性 卡顿 的情况 这是一个非常简单的 2D OpenGL ES 2 0 游戏 这是一个持续存在的问题 我已经多次重新访问过 在我的游戏循环中 我有 2 个 计时器 一个用于记录前一
  • 如何使用“downloadHandler”在闪亮的可反应内部创建下载按钮?

    我创建downloadlinksa 的行内reactable 我这样做是为了DT datatable and a reactable reactable 我还创建了相应的output downloadHandler在 ids 上使用 app
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两
  • 闪亮的传单添加大量分离的折线

    我有一个 200k 行数据集 其中包含出发地和目的地的坐标 我有一个 R 闪亮的应用程序 带有传单地图 可以在这些坐标上显示圆圈 尽管坐标数量很大 但效果很好 这是数据的简化示例 每行包含出行id 出发地经纬度 目的地经纬度 id lat
  • 应用程序在加载 xml 布局文件的主线程中做了太多工作

    我正在制作一个 9x9 数独网格 其中 81 个单元格本身就是一个 3x3 网格 单个细胞看起来像这样 1 2 3 4 5 6 7 8 9 每个数字代表该单元格的铅笔注释 我有一个名为 cell layout xml 的文件 表示这种 3x
  • R:适合显示具有倾斜计数的数据的图

    我有这样的数据 Name Count Object1 110 Object2 111 Object3 95 Object4 40 Object2000 1 因此 只有前 3 个物体的计数较高 其余 1996 个物体的数量少于 40 个 其中
  • 如何修改反应链以便最后修改的对象控制其他链接的对象?

    新注释 1 最终解决的代码发布在最底部 反映了 ismirsehregal 于 2021 年 12 月 3 日的解决方案 以及一些标记为 ADDED 和 MODIFIED 的小调整 ADD 是为了解决我在矩阵 2 添加值后从矩阵 1 中删除
  • 闪亮的仪表板侧边栏中的可折叠菜单项

    我的侧边栏中有两个菜单项 目前 如果我单击任何菜单项 则会显示所有菜单项的选项卡项 我想让它可折叠 如果我单击多个名称菜单 单个分析应该折叠 如果我单击单个分析 多个分析应该折叠 目前的设计是 相同的可重现代码是 library shiny
  • 如何使用 Rrank() 函数创建新的ties.method? [复制]

    这个问题在这里已经有答案了 我试图按人口和日期排序这个数据框 所以我使用order and rank 功能 gt df lt data frame idgeoville c 5 8 4 3 4 5 8 8 date c rep 1950 4
  • do.call 的 envir 选项如何工作?

    的文档do call states If quote is FALSE 默认值 然后对参数进行求值 在调用环境中 而不是在envir 这句话向我暗示 当quote FALSE 指定envir没有什么区别 然而 事实并非如此 事实上我遇到过需
  • 有没有一种明智的方法可以在 R 中执行诸如文档字符串之类的操作?

    这不仅仅是一个编码风格问题 如果您了解 python 我认为 Ruby 也有类似的东西 您可以在函数中拥有文档字符串 这样您就可以通过发出 help 命令轻松获取该字符串 例如 def something t None Do somethi
  • 缩放geom_密度以将geom_bar与y上的百分比相匹配

    因为我对数学感到困惑上次我尝试问这个问题 https stackoverflow com questions 32412805 ggplot2 histogram with density curve that sums to 1 这是另一
  • “条件长度 > 1 并且仅使用第一个元素”错误

    我对 f 语句有疑问 因为它返回给我以下错误消息 条件长度 gt 1 并且仅使用第一个元素 我有一个名为 data summary 的数据框 我想创建两个新变量vol up and vol down取决于我的数据框的其他变量 这是我的脚本代
  • 为什么python+sqlite3特别慢?

    我尝试使用 Python 2 7 4 sqlite3 和 Firefox SQLite Manager 0 8 0 处理对同一数据库的相同请求 在小型数据库 8000 条记录 上 Python 和 Firefox 都运行得很快并且给出了相同
  • 记录类名、方法名和行号的性能影响

    我正在我的 java 应用程序中实现日志记录 以便我可以调试应用程序投入生产后可能出现的潜在问题 考虑到在这种情况下 人们不会奢侈地使用 IDE 开发工具 以调试模式运行事物或单步执行完整代码 因此在每条消息中记录类名 方法名和行号将非常有
  • 将 r 中的一列从出生日期更改为年龄

    我是第一次使用 data table 我的表中有大约 400 000 个年龄的列 我需要将它们从出生日期转换为年龄 做这个的最好方式是什么 我一直在思考这个问题 到目前为止对这两个答案都不满意 我喜欢用lubridate 就像 KFB 所做

随机推荐

  • 如何更改 data.table 中因子列的级别

    改变水平的正确方法是什么factor中的列data table 注 不是数据框 library data table mydt lt data table id 1 6 value as factor c A A B B B C key i
  • 在 Woocommerce 3 中以编程方式设置自定义运费

    我搜索并找到了许多如何更改运费的示例 基本上我想做同样的事情 但我想使用第 3 方 API 我已经使用functions php 设置了一个自定义插件并激活了它 我认为使用了这样简单的东西 add filter woocommerce pa
  • go中pprof导入开销有多大

    我有几个 go 程序有一个未使用的输入net http pprof在他们中 import net http pprof http ListenAndServe 127 0 0 1 6060 nil 我想知道这次导入的 CPU 和内存开销是多
  • 如何在 CodeIgniter 3 中使用 PHPSpreadsheet 从 Excel(.xlsx 和 .xls)文件读取数据?

    最近 在我的一个基于 CodeIgniter 的项目中 我需要从 Excel 文件 xlsx 和 xls 读取数据并将这些数据插入 MySQL 不幸的是 我没有使用PHP电子表格之前 因为我不需要使用 Excel 到目前为止我所做的是下载P
  • 如何向 JTextArea 添加文本? (控制台模拟)[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何将文本 命令 如在控制台中 添加到 JTextArea 中 或者 更具体地说 如何在 FTP 程序中添加 JTextArea 作为控制台
  • 从 Native 指针中获取数据

    将数据放入 Perl 6 Native 指针中没什么大不了的 sub memcpy Pointer void source Pointer void destination int32 size is native my Blob blob
  • XCode 7.3.1 更新未安装

    看起来 XCode 发布了新的更新 此问题似乎持续存在 即使 iTunes Store 将更新发布在 过去 30 天内安装的更新 部分 也不会呈现该更新 重新启动后 系统会提示我再次更新 即使我已经完成了两次 最终 当我打开 XCode 时
  • 如何使 Istanbul 生成我所有源代码的覆盖范围?

    目前 伊斯坦布尔仅为我的测试中使用的文件生成覆盖范围 这没关系 但似乎在某种程度上违背了覆盖范围的目的 我没有伊斯坦布尔配置 并且通过调用它npm test使用以下脚本字符串 istanbul cover mocha R dot check
  • DS.FixtureAdapter 丢失带有 hasMany 异步属性的夹具数据

    背景 我已经提交了github问题 https github com emberjs data issues 2136与 Ember Data 团队合作 但我很想了解如何解决这个问题 或者如果我一直都错了 如果出现此错误 您可以看到一个工作
  • 如何在 JavaScript 警报框中打印 Struts2 ActionMessage

    我有一个Action使用发送操作消息的类addActionMessage 我想使用 JavaScript 警报框在 JSP 中显示该消息 我尝试过 alert
  • 全新 MYSQL 安装,用户“root”访问被拒绝

    我有一台旧的 lamp 服务器 我想将其移动到新机器上 所以我做了一个 mysqldump 在新机器上安装了 Ubuntu Server 13 10 在安装过程中安装了 lamp 然后从旧的 lamp 服务器导入了我的旧 mysql 数据库
  • 编译 bevy_dylib v0.5.0 错误:与 `cc` 链接失败:退出状态:1

    在刚刚升级到 Monterey 的 Mac 上 我在尝试执行以下操作时收到以下信息cargo run一个简单的 Bevy 程序 我已经按照推荐重新安装了 XCode CLThere https stackoverflow com quest
  • R.java消失了

    我最近下载了 Android 支持包 并一直在使用它尝试让我的应用程序 在 SDK 10 上运行 使用 GridLayout 不管怎样 我清理了我的项目几次 以解决 XML 文件中的这个错误 然后当我回到 src 中的类时 对 R 的每个引
  • 使用“单一职责原则”强制我的容器拥有公共设置器

    我正在努力遵循 SOLID 原则进行设计 我发现 当您使用 单一职责原则 SOLID 的 S 时 您通常必须在数据容器和数据处理器之间划分类 例如 如果我有一个具有 5 个属性的类 person 它是从数据库读取的 而不是将所有内容都放在一
  • 如何开始使用 svn:externals?

    我正在寻找有关使用 svn externals 的简洁且写得好的教程 我自己已经知道如何以基本方式使用它们 但我想要一篇好文章 在回答最近出现的此类问题时可以链接到 如何处理依赖于同一来源的多个项目 https stackoverflow
  • ORA-12899: 值对于列来说太大

    我以 feed 的形式从 erp 系统获取数据 特别是 feed 中的一列长度仅为 15 在目标表中也对应的列长度也是varchar2 15 但是当我尝试将相同内容加载到数据库中时 它显示错误 例如 ORA 12899 列 emp name
  • 仅当按下特定命令按钮时才根据需要验证输入

    我有 JSF 验证的具体用例 例如我有一个inputText field
  • 选择范围并复制/粘贴到记事本 - 即将完成

    经过大量的工作和测试 确实非常可悲 我终于成功地选择了一个范围工作表 然后将其复制 粘贴到记事本中 此后该文件将由另一个应用程序读取 不幸的是 该应用程序拒绝该文件 我无法调试原因 我收到的唯一消息是发生错误最后一行 令人惊讶的是 当我手动
  • 使用 matplotlib.pcolormesh() 将颜色设置为透明的正确方法?

    我想要低于一定水平的值 在这种情况下0 绘制为透明matplotlib pcolormesh 而且我似乎无法使用我找到的选项进行任何操作 我尝试过设置kwarg vmin 1 我尝试设置限制plt cm cmap set under alp
  • 数据重塑的 R 性能

    我正在尝试在 R 中重塑数据框 但使用推荐的方法似乎有问题 数据帧具有以下结构 ID DATE1 DATE2 VALTYPE VALUE abcd1233 2009 11 12 2009 12 23 TYPE1 123 45 VALTYPE