Может ли dplyr объединяться по нескольким столбцам или составному ключу?

111

Я понимаю, что dplyrv3.0 позволяет объединять разные переменные:

left_join(x, y, by = c("a" = "b")будет соответствовать x.aкy.b

Однако можно ли присоединиться к комбинации переменных или мне нужно заранее добавить составной ключ?

Что-то вроде этого:

left_join(x, y, by = c("a c" = "b d")для соответствия конкатенации [ x.aи x.c] с [ y.bи y.d]

ЯсонАйзкалнс
источник

Ответы:

200

Обновление для использования tibble ()

Вы можете передать именованный вектор длины больше 1 в byаргумент 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
Спасибо за это; также работает, когда столбцы во фреймах данных имеют одно и то же имя, например left_join(d1, d2, by = c("firstname" = "firstname", "lastname" = "lastname")). Для некоторых может быть неочевидным.
Энтони Саймон Мельничук
10
Когда столбцы соединения одинаковы, вы также можете избежать =:left_join(d1, d2, by = c("firstname", "lastname"))
davechilders
2
Ооо ... Я держался дома, но ... это похоже на И ... что, я полагаю, имеет смысл, но я надеялся, что это будет x = x2 OR y = y2, так как у меня есть несколько индексов создан, чтобы попытаться идентифицировать повторяющиеся, но поврежденные записи в разнородных ресурсах.
Джошуа Эрик Тюркотт
Имена не обязательно должны быть одинаковыми, они должны быть действительными именами столбцов в соответствующем фрейме данных, т.е. у одного может быть столбец «fname», а у другого «firstname», и все будет работать нормально.
Сан-Эммануэль Джеймс,