R data.table中的笛卡尔连接
我正在尝试使用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)”。任何帮助都
预期产出:
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