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.