我有两个表,我想使用 dplyr 进行完全连接,但我不希望它删除任何列。根据文档和我自己的经验,它只保留左侧的连接列。当您在右侧有一行记录时,这是一个问题,因为连接值已经消失。
例如,假设我有两个表 a 和 b,
customerId | revenue customerId | state
-----------|--------- -----------|-------
1 | 2000 1 | CA
2 | 3000 3 | GA
4 | 4000 4 | NY
做类似full_join(a, b, by="customerId")
会产生的事情
customerId | revenue | state
-----------|---------|-------
1 | 2000 | CA
2 | 3000 | <NA>
<NA> | <NA> | GA
4 | 4000 | NY
所以没有办法知道第三排来自哪个客户。理想的输出是
customerId.a | customerId.b | revenue | state
-------------|--------------|---------|-------
1 | 1 | 2000 | CA
2 | <NA> | 3000 | <NA>
<NA> | 3 | <NA> | GA
4 | 4 | 4000 | NY
请注意,这只是一个玩具示例。我实际上正在使用 sparklyr,所以这一切都在 Spark 中运行。因此,合并对我来说在这里不起作用。有没有办法做我在 dplyr 中寻找的东西?
编辑:正如有人指出的那样,这实际上在 dplyr 本身在本地工作。但是,我确实使用 sparklyr(使用 dplyr)看到了这个问题。这是查看的代码:
library(sparklyr)
sc <- spark_connect("local[4]")
d1 <- data_frame(customerId = c("1","2","4"), revenue=c(2000,3000,4000))
d2 <- data_frame(customerId = c("1","3","4"), state=c("CA", "GA", "NY"))
d1_tbl <- copy_to(sc, d1)
d2_tbl <- copy_to(sc, d2)
full_join(d1_tbl, d2_tbl, by=c("customerId"))