展开两个大数据文件并使用data.table应用?

2024-03-06

我正在尝试将函数应用于两个数据集df1 and df2 where df1包含(a, b)并且可以有 100 万行长,并且df2包含(x, y, z)并且可以非常大,从 ~100 到 >10,000。我想应用一个函数foo对两个数据集的每个组合进行求和,然后对第二个数据集求和。

foo <- function(a, b, x, y, z) a + b + x + y + z
df1 <- data.frame(a = 1:10, b = 11:20)
df2 <- data.frame(x= 1:5, y = 21:25, z = 31:35)

我用来应用此函数的代码(取自@jlhoward此处如何避免 R 中多个变量的多重循环 https://stackoverflow.com/questions/27572050/how-to-avoid-multiple-loops-with-multiple-variables-in-r)

foo.new <- function(p1, p2) {
  p1 = as.list(p1); p2 = as.list(p2)
  foo(p1$a, p1$b, p2$x, p2$y, p2$z)
}

indx   <- expand.grid(indx2 = seq(nrow(df2)), indx1 = seq(nrow(df1)))
result <- with(indx, foo.new(df1[indx1, ], df2[indx2, ]))
sums   <- aggregate(result, by = list(rep(seq(nrow(df1)), each = nrow(df2))), sum)

然而,作为df2变大(>1000)我很快就耗尽了内存来执行result上面的功能(运行 32GB RAM 的 64 位 PC)。

我读过关于data.table相当多,但无法评估其中是否有有助于节省内存的功能。可以替代的东西with并在以下位置创建一个较小的文件result步骤,或expand.grid at the index步骤,创建迄今为止最大的文件。


这是一个 data.table 解决方案:应该相当快:

library(data.table)
indx<-CJ(indx1=seq(nrow(df2)),indx2=seq(nrow(df1))) #CJ is data.table function for expand.grid
 indx[,`:=`(result=foo.new(df1[indx1, ], df2[indx2, ]),Group.1=rep(seq(nrow(df1)), each = nrow(df2)))][,.(sums=sum(result)),by=Group.1]

    Group.1 sums
 1:       1  355
 2:       2  365
 3:       3  375
 4:       4  385
 5:       5  395
 6:       6  405
 7:       7  415
 8:       8  425
 9:       9  435
10:      10  445
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

展开两个大数据文件并使用data.table应用? 的相关文章

随机推荐

  • static_cast(-1) 是在没有 numeric_limits 的情况下生成全一位数据的正确方法吗?

    我在无法访问 C 标准库的环境中编写 C 代码 特别是无法访问std numeric limits 假设我想实现 template
  • 如何使用 API (curl) 编辑 github 问题? (特别是:关闭)

    我计划将另一个 本地 系统中跟踪的数百个错误迁移到 GitHub 的问题系统中 大多数这些错误在过去都已被修复 我可以使用 github 的 API 来创建问题 例如 curl u GITHUB TOKEN x oauth basic ht
  • 片段添加或替换不起作用

    我正在使用这里的代码参考 http developer android com guide components fragments html When I put in that code in my program I get an e
  • 如何从Sqlite获取最后一条记录?

    我有一张桌子question table和一个ImageButton Back 单击后我需要从数据库中获取最后插入的记录Back 我的行包含以下列 question optionA optionB optionC optionD 我需要这些
  • 关于java设计模式的建议

    我需要一些关于 Java 中以下问题的设计模式的有用建议 我有三门课 class A extends X implement Y doA class B extends X implement Y doB class C extends X
  • 如何在 Spark SQL 中压缩两个数组列

    我有一个 Pandas 数据框 我尝试首先将包含字符串值的两列连接到一个列表中 然后使用 zip 我用 连接列表的每个元素 我的数据集如下 df column 1 abc def ghi df column 2 1 0 2 0 3 0 我想
  • Spring MVC 中的 WebRequest 和 HttpServletRequest

    两者有什么区别 两者都有一个getParameter方法以及setAttribute方法 那么两者的区别在哪里呢 1 一般情况下使用哪一种更好 2 请说明具体的使用场景 The WebRequest 的 javadoc http docs
  • pop eip 指令合法吗?

    我正在参加大学的理论考试 并被问到这个问题 经过一些指令后 esp 增长了 4 eip 增长了 20 该指令可能是什么 我标记了 pop eip 和 ret nasm 32位汇编中是否可以执行pop eip指令 pop eip不是真正的 x
  • 在 Shopify 中更新/删除购物车属性

    我使用购物车属性将每个产品的额外信息添加到购物车 从产品页面 我专门使用购物车属性 over 行项目属性因为客户需要能够稍后按订单编辑此信息 而订单项属性不允许 添加信息工作得很好 当客户决定从购物车中删除商品时 问题就出现了 因为尽管该商
  • 毕达哥拉斯三倍效率

    我需要创建一个函数 它接受整数列表并返回列表中是否存在毕达哥拉斯三元组 例如 3 5 7 4 回报True因为 3 4 5 是毕达哥拉斯三元组 到目前为止我有这个 Python def containsPythagoreanTriple a
  • 如何 boost::bind 到传递并返回 std::string 的托管类的成员?

    我正在尝试做一些非常类似的事情this https stackoverflow com questions 163757 how to use boostbind in c cli to bind a member of a managed
  • 找不到记录器“apscheduler.scheduler”的处理程序

    from apscheduler scheduler import Scheduler import os class ListHref def init self print In ListHref Class self name hre
  • 如何计算 pandas 中每个唯一值的出现次数

    我有一个大的 pandas 数据框 我想计算其中每个唯一值的出现次数 我尝试遵循 但需要花费大量时间和内存使用量 我怎样才能以Pythonic的方式做到这一点 pack for index row in packets iterrows p
  • 动态禁用 jQuery Datepicker 图标

    我对 jQuery 相当陌生 并且我一直在寻找一个像样的免费日期选择器有一段时间了 我对 jQuery UI 的日期选择器非常满意 但我遇到了障碍 我使用它的项目要求我在文本框旁边有一个图标 虽然这相当简单 但我不知道如何动态禁用该图标 有
  • 在 MATLAB 中单击图像时从指针获取索引值

    如何找到点击点的索引并将其添加到数组 列表或向量的末尾 h figure image result locx locy while ishandle h pos get 0 PointerLocation locx end 1 pos 1
  • RuntimeException:在注册表中找不到应用程序“”。

    背景 目标 我尝试在 Windows 7 64 位上安装 Simics Tools for Eclipse 插件 我正在使用 Eclipse Indigo for Java 64 位 为了解决这个问题 我决定在当前设置旁边安装 32 位版本
  • 将 LWJGL java 应用程序放入 jpanel 或 canvas 中

    随着 lwjgl 3 的新更新 类 Display 不存在 我到处搜索 但找不到任何有关如何将所有 lwjgl 应用程序放入 jpanel 或画布或类似内容的内容 我已经想过使用像 twl 这样的 opengl gui 但这会让一切变得更加
  • iOS 6 中的分段控件tintColor

    我有一个有 8 段的分段控件 我可以更改整个控件的默认色调 但是我可以为控件中的每个部分设置不同的颜色吗 我找到了一个在 5 1 中使用的教程 其中有一个调用此方法的新类 void setTintColor UIColor color fo
  • onCreate 流程在 finish() 之后继续

    我想从内部完成一项活动onCreate方法 当我打电话时finish onDestroy 不会立即调用 代码不断流过finish onDestroy 直到之后才被调用onCreate 右大括号 Per the onCreate 描述位于de
  • 展开两个大数据文件并使用data.table应用?

    我正在尝试将函数应用于两个数据集df1 and df2 where df1包含 a b 并且可以有 100 万行长 并且df2包含 x y z 并且可以非常大 从 100 到 gt 10 000 我想应用一个函数foo对两个数据集的每个组合