Dplyr può unirsi su più colonne o chiavi composite?


111

Mi rendo conto che la dplyrv3.0 ti permette di unirti su diverse variabili:

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

Tuttavia, è possibile unire una combinazione di variabili o devo aggiungere prima una chiave composta?

Qualcosa come questo:

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

Risposte:


200

Aggiornamento per utilizzare tibble ()

Puoi passare un vettore con nome di lunghezza maggiore di 1 byall'argomento di 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
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.
Anthony Simon Mielniczuk

10
Quando le colonne di join sono le stesse, puoi anche evitare =:left_join(d1, d2, by = c("firstname", "lastname"))
davechilders

2
Ooof ... stavo resistendo a casa, ma ... questo sembra essere un AND ... che suppongo abbia senso ma speravo che fosse un x = x2 OR y = y2, dato che ho più indici costruito per cercare di identificare voci duplicate ma danneggiate su risorse disparate.
Joshua Eric Turcotte

I nomi non devono essere gli stessi, dovrebbero essere solo nomi di colonna validi nel dataframe corrispondente, ovvero uno può avere una colonna "fname" e l'altro "firstname" e funzionerà perfettamente.
San Emmanuel James
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.