O dplyr pode se unir em várias colunas ou chave composta?


111

Sei que a dplyrv3.0 permite que você junte variáveis ​​diferentes:

left_join(x, y, by = c("a" = "b")vai combinar x.acomy.b

No entanto, é possível juntar em uma combinação de variáveis ​​ou eu tenho que adicionar uma chave composta antes?

Algo assim:

left_join(x, y, by = c("a c" = "b d")para combinar a concatenação de [ x.ae x.c] para [ y.be y.d]

Respostas:


199

Atualizando para usar tibble ()

Você pode passar um vetor nomeado de comprimento maior que 1 para o byargumento de left_join():

library(dplyr)

d1 <- tibble(
  x = letters[1:3],
  y = LETTERS[1:3],
  a = rnorm(3)
  )

d2 <- tibble(
  x2 = letters[3:1],
  y2 = LETTERS[3:1],
  b = rnorm(3)
  )

left_join(d1, d2, by = c("x" = "x2", "y" = "y2"))

5
Obrigado por isso; também funciona quando as colunas nos quadros de dados têm o mesmo nome, por exemplo left_join(d1, d2, by = c("firstname" = "firstname", "lastname" = "lastname")). Pode não ser óbvio para alguns.
Anthony Simon Mielniczuk

10
Quando as colunas de junção são iguais, você também pode evitar =:left_join(d1, d2, by = c("firstname", "lastname"))
davechilders

2
Uau ... Eu estava esperando em casa, mas ... isso parece ser um AND ... o que eu acho que faz sentido, mas esperava que fosse um x = x2 OR y = y2, pois tenho vários índices construído para tentar identificar entradas duplicadas, mas danificadas em recursos diferentes.
Joshua Eric Turcotte

Os nomes não precisam ser iguais, devem ser apenas nomes de coluna válidos no dataframe correspondente, ou seja, um pode ter uma coluna "fname" e o outro "firstname" e funcionará perfeitamente.
San Emmanuel James
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.