Dplyr có thể tham gia trên nhiều cột hoặc khóa tổng hợp không?


111

Tôi nhận ra rằng dplyrv3.0 cho phép bạn tham gia vào các biến khác nhau:

left_join(x, y, by = c("a" = "b")sẽ phù hợp x.avớiy.b

Tuy nhiên, có thể tham gia trên một tổ hợp các biến không hay tôi phải thêm một khóa tổng hợp trước?

Một cái gì đó như thế này:

left_join(x, y, by = c("a c" = "b d")để so khớp nối [ x.ax.c] thành [ y.by.d]

Câu trả lời:


199

Đang cập nhật để sử dụng tibble ()

Bạn có thể truyền một vectơ đã đặt tên có độ dài lớn hơn 1 vào byđối số của 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
Cảm ơn vì điều đó; cũng hoạt động khi các cột trong khung dữ liệu có cùng tên, ví dụ left_join(d1, d2, by = c("firstname" = "firstname", "lastname" = "lastname")). Có thể không rõ ràng đối với một số người.
Anthony Simon Mielniczuk

10
Khi tham gia các cột là như nhau, bạn cũng có thể tránh được =:left_join(d1, d2, by = c("firstname", "lastname"))
davechilders

2
Ooof ... Tôi đã cố gắng về nhà, nhưng ... đây có vẻ là một VÀ ... mà tôi cho là hợp lý nhưng tôi đã hy vọng nó sẽ là một x = x2 HOẶC y = y2, vì tôi có nhiều chỉ mục được xây dựng để cố gắng xác định các mục nhập trùng lặp nhưng bị hỏng trên các tài nguyên khác nhau.
Joshua Eric Turcotte

Các tên không nhất thiết phải giống nhau, chỉ nên là các tên cột hợp lệ trong khung dữ liệu tương ứng, tức là người ta có thể có một cột là "fname" và "firstname" khác và sẽ hoạt động tốt.
San Emmanuel James
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.