R data.table中的笛卡尔连接

R data.table中的笛卡尔连接,r,data.table,R,Data.table,我正在尝试使用data.table进行完全笛卡尔连接,但运气不佳 代码: 预期产出: merge(data.frame(a),data.frame(b),all.x=TRUE,all.y=TRUE) 我曾尝试过merge(a,b,allow.cartesian=TRUE)但它给了我以下错误-“merge.data.table(a,b,allow.cartesian=TRUE)中的错误:需要的列名的非空向量。” 我正在使用带有最新数据的“R版本3.0.1(2013-05-16)”。任何帮助都

我正在尝试使用data.table进行完全笛卡尔连接,但运气不佳

代码:


预期产出:

merge(data.frame(a),data.frame(b),all.x=TRUE,all.y=TRUE)

我曾尝试过
merge(a,b,allow.cartesian=TRUE)
但它给了我以下错误-“
merge.data.table(a,b,allow.cartesian=TRUE)中的错误:
需要
的列名的非空向量。

我正在使用带有最新
数据的“
R版本3.0.1(2013-05-16)
”。任何帮助都将不胜感激


关于@Codoremifa的扩展:

> dt <- c(20131017,20131018)
> b <- data.table(ticker=c("ABC","DEF","XYZ"), ind=c("MISC1","MISC2","MISC3"), key="ticker")
> b[CJ(ticker=ticker, dt=dt)][, c(3, 1, 2)]
         dt ticker   ind
1: 20131017    ABC MISC1
2: 20131018    ABC MISC1
3: 20131017    DEF MISC2
4: 20131018    DEF MISC2
5: 20131017    XYZ MISC3
6: 20131018    XYZ MISC3
dtb[CJ(ticker=ticker,dt=dt)][,c(3,1,2)] 自动售票机 1:20131017 ABC MISC1 2:20131018 ABC MISC1 3:20131017 DEF MISC2 4:20131018 DEF MISC2 5:20131017 XYZ MISC3 6:20131018 XYZ MISC3

如果用一个命令就可以了,那就更好了,但这相对简单。

我认为更好的解决方案是:

a[,as.list(b),by=dt]

         dt ticker   ind
1: 20131017    ABC MISC1
2: 20131017    DEF MISC2
3: 20131017    XYZ MISC3
4: 20131018    ABC MISC1
5: 20131018    DEF MISC2
6: 20131018    XYZ MISC3

这看起来更像是一个类似于
展开.grid
的问题,而不是一个
合并问题。您没有公共变量。所需的输出是通过使用merge函数的笛卡尔连接实现的,但它在data.frame上工作,如果可能的话,我正在寻找data.table解决方案。我通常添加一个伪变量,按该变量合并,并使
allow.Cartesian=TRUE
CJ
展开。grid
可以交叉连接向量,但我找不到一个基函数来创建两个表的交叉连接。有人能指出这样一个函数吗,如果它存在的话?@Codoremifa是的,我总是只取行号的
CJ
expand.grid
;从来没有找到更好的方法。这里有一个替代的、笨拙的解决方案:
data.table(merge.data.frame(a,b,all=TRUE))
。正如DWin所指出的,它实际上不是一个
合并
操作。然而,为了与
merge.data.frame
兼容,我想这个功能是必需的。你介意申请一个功能吗?谢谢。这很有用。我也不能让笛卡尔加入工作。
a[,as.list(b),by=dt]

         dt ticker   ind
1: 20131017    ABC MISC1
2: 20131017    DEF MISC2
3: 20131017    XYZ MISC3
4: 20131018    ABC MISC1
5: 20131018    DEF MISC2
6: 20131018    XYZ MISC3