如何在R中对两个H2OFrame执行交叉连接?

3

我想在两个H2OFrames之间进行笛卡尔积。寻找仅在H2OFrame中的解决方案。

col1.1 <- c('A', 'B', 'E', 'C', 'F', 'D')
dummy <- rep(1,6)

d1.hex <- as.h2o( cbind( col1.1, dummy ) )

col2.1 <- c('xx', 'yy', 'zz', 'ww')

dummy <- rep(1,4)

d2.hex <- as.h2o( cbind( col2.1, dummy ) )

如果我使用 all=TRUE,会抛出错误:未实现。
h2o.merge(d1.hex, d2.hex, all = TRUE)

如果我使用默认设置,连接结果不会是交叉连接

h2o.merge(d1.hex, d2.hex )

虚拟列1.1 列2.1

1 A xx

1 B xx

1 E xx

1 C xx

1 F xx

1 D xx

我已经尝试将连接列的数据类型更改为分类或数字,但没有成功。希望您能帮助解决这个问题。

谢谢。


所以我对h2o不太熟悉,但这就是你遇到问题的地方。在R中,merge(df1, df2, all = TRUE)似乎是交叉连接的正确方式。 - Matt W.
谢谢@MattW。但我正在寻找H2OFrame的解决方案。从读取文件到进行预测,我正在尝试使用H2O,而我的数据集非常庞大。 - Vikash Kumar
1个回答

0
令人沮丧的答案是你无法做到,而且已经有两个错误报告了:

https://0xdata.atlassian.net/browse/PUBDEV-4516

https://0xdata.atlassian.net/browse/PUBDEV-3699

最简单的解决方法是下载所有数据,并在R客户端中执行。但对于大数据来说可能不可行。如果您必须在H2O集群中执行,则需要使用循环:

  1. 将d1.hex中第一个唯一值的行复制到tmp
  2. tmp2 = h2o.merge(tmp, d2.hex, all.y = TRUE)

对于d1.hex中的每个唯一值重复此操作。然后,在最后,对所有tmp2表执行h2o.rbind()

或者,经典的开源解决方案:自己实现未实现的代码(或请求/支付h2o.ai实现它)。


谢谢@Darren。感谢您的帮助和精准的答案。 - Vikash Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接