2014-10-28 10 views
57

mi rendo conto della v3.0 dplyr consente di unire su diverse variabili:È possibile unire dplyr su più colonne o chiave composita?

left_join(x, y, by = c("a" = "b") corrisponderà x.a a y.b

Tuttavia, è possibile unirsi in una combinazione di variabili? O devo prima aggiungere una chiave composita?

Questo è qualcosa di simile:

left_join(x, y, by = c("a c" = "b d") per abbinare la concatenazione di [x.a e x.c] a [y.b e y.d]

risposta

96

È possibile passare un nome vettore di lunghezza superiore a 1 al by argomento left_join():

library(dplyr) 

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

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

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

Grazie per questo; funziona anche quando le colonne nei frame di dati hanno lo stesso nome, ad es. 'left_join (d1, d2, by = c (" firstname "=" firstname "," lastname "=" lastname "))'. Potrebbe non essere ovvio per alcuni. –

+0

Quando le colonne di join sono uguali, è anche possibile evitare '=': 'left_join (d1, d2, by = c (" firstname "," lastname "))' – davechilders

Problemi correlati