假设我有两个数据表:
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,以下数据表肯定会小于。
有没有人知道这样做的有效方法?
答案 0 :(得分:0)
处理这种情况的一种黑客方法可能是为每个表添加一个相同的帮助列,然后允许笛卡尔连接:
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]