Tôi có hai khung dữ liệu mà tôi muốn kết hợp bằng dplyr. Một là khung dữ liệu chứa tên.
test_data <- data.frame(first_name = c("john", "bill", "madison", "abby", "zzz"),
stringsAsFactors = FALSE)
Khung dữ liệu khác chứa phiên bản đã được làm sạch của kho dữ liệu tên Kantrowitz, xác định giới tính. Đây là một ví dụ nhỏ nhất:
kantrowitz <- structure(list(name = c("john", "bill", "madison", "abby", "thomas"), gender = c("M", "either", "M", "either", "M")), .Names = c("name", "gender"), row.names = c(NA, 5L), class = c("tbl_df", "tbl", "data.frame"))
Về cơ bản, tôi muốn tra cứu giới tính của tên từ test_data
bảng bằng cách sử dụng kantrowitz
bảng. Bởi vì tôi sẽ trừu tượng hóa điều này thành một hàm encode_gender
, tôi sẽ không biết tên của cột trong tập dữ liệu sẽ được sử dụng, và vì vậy tôi không thể đảm bảo rằng nó sẽ name
như vậy kantrowitz$name
.
Trong RI cơ sở sẽ thực hiện hợp nhất theo cách này:
merge(test_data, kantrowitz, by.x = "first_names", by.y = "name", all.x = TRUE)
Điều đó trả về đầu ra chính xác:
first_name gender
1 abby either
2 bill either
3 john M
4 madison M
5 zzz <NA>
Nhưng tôi muốn làm điều này trong dplyr vì tôi đang sử dụng gói đó cho tất cả các thao tác dữ liệu khác của mình. by
Tùy chọn dplyr cho các *_join
chức năng khác nhau chỉ cho phép tôi chỉ định một tên cột, nhưng tôi cần chỉ định hai. Tôi đang tìm kiếm một cái gì đó như thế này:
library(dplyr)
# either
left_join(test_data, kantrowitz, by.x = "first_name", by.y = "name")
# or
left_join(test_data, kantrowitz, by = c("first_name", "name"))
Cách để thực hiện kiểu tham gia này bằng dplyr là gì?
(Đừng bận tâm rằng kho tài liệu Kantrowitz là một cách tồi để xác định giới tính. Tôi đang làm việc để triển khai tốt hơn, nhưng tôi muốn điều này hoạt động trước đã.)