r - 为现有数据表 R 的每一行创建一个新数据表,同时避免内存向量问题

标签 r matrix merge dplyr data.table

假设我有两个数据表:

library(data.table)
A=data.table(w=1:3,d=5:7)
B=data.table(K=2:4,m=9:11)


> A
   w d
1: 1 5
2: 2 6
3: 3 7
> B
   K  m
1: 2  9
2: 3 10
3: 4 11

我想做以下扩展,其中 A 的每一行都有一个新的 B:

C=A[,B[],by=names(A)]

   w d K  m
1: 1 5 2  9
2: 1 5 3 10
3: 1 5 4 11
4: 2 6 2  9
5: 2 6 3 10
6: 2 6 4 11
7: 3 7 2  9
8: 3 7 3 10
9: 3 7 4 11

但是,当我使用真实数据执行此操作时,我收到此错误:

Error in `[.data.table`(A, , B[], by = names(A)) : 
  negative length vectors are not allowed

事实证明这是一个内存错误。但是,我认为应该有一种方法可以在没有循环的情况下做到这一点,内存在我的服务器上高达 50GB 的 ram 上不是问题,下面的数据表肯定会小于这个值。

有人知道有效的方法吗?

最佳答案

处理此问题的一种巧妙方法可能是向每个表添加相同的辅助列,然后允许笛卡尔连接:

library(data.table)
A = data.table(w = 1:3, d = 5:7)
B = data.table(K = 2:4, m = 9:11)

A[, j := 1]
B[, j := 1]

C = A[B, on = 'j', allow.cartesian = T]

关于r - 为现有数据表 R 的每一行创建一个新数据表,同时避免内存向量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50549023/

相关文章:

swift - 将字典与数组合并为 Swift 4 中的值

python - 将两列与 pandas 中的 if 条件合并

sql - 忽略换行符的差异工具

r - : non-numeric argument to binary operator in R错误的原因是什么

arrays - R - 重新排列数组

c++ - 将矩阵的 segmentation 映射到 vector

python - 在python中以基本方式反转矩阵列顺序

python - 如何为每列使用不同的默认值初始化 NumPy 结构化数组?

矩阵的 R 索引用于确定 R 中超过 8 小时的最大值的索引

r - 是否有一个函数或程序包可以模拟从lm()返回的对象的预测?