У меня есть две таблицы, для которых я хочу выполнить полное соединение с помощью 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"))