gpt4 book ai didi

r - 是否可以在 dplyr 中进行完全连接并保留连接中使用的所有列?

转载 作者:行者123 更新时间:2023-12-04 12:19:55 26 4
gpt4 key购买 nike

我有两个表,我想使用 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"))

最佳答案

您可以创建单独的相同 customerId对于加入前的两个数据框:

full_join(
mutate(a, customerId.a = customerId),
mutate(b, customerId.b = customerId),
by="customerId"
) %>% select(-customerId)

# revenue customerId.a state customerId.b
#1 2000 1 CA 1
#2 3000 2 <NA> NA
#3 4000 4 NY 4
#4 NA NA GA 3

关于r - 是否可以在 dplyr 中进行完全连接并保留连接中使用的所有列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43809140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com