ฉันมีเฟรมข้อมูลสองเฟรมที่ฉันต้องการเข้าร่วมโดยใช้ dplyr หนึ่งคือกรอบข้อมูลที่มีชื่อ
test_data <- data.frame(first_name = c("john", "bill", "madison", "abby", "zzz"),
stringsAsFactors = FALSE)
กรอบข้อมูลอื่นประกอบด้วยคลังข้อมูลชื่อ Kantrowitz รุ่นที่ล้างแล้วโดยระบุเพศ นี่คือตัวอย่างเล็กน้อย:
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"))
โดยพื้นฐานแล้วฉันต้องการค้นหาเพศของชื่อจากtest_data
ตารางโดยใช้kantrowitz
ตาราง เนื่องจากฉันจะสรุปสิ่งนี้เป็นฟังก์ชันencode_gender
ฉันจึงไม่รู้ชื่อคอลัมน์ในชุดข้อมูลที่จะใช้ดังนั้นฉันจึงไม่สามารถรับประกันได้ว่าจะเป็นname
เช่นkantrowitz$name
นั้น
ในฐาน RI จะทำการผสานด้วยวิธีนี้:
merge(test_data, kantrowitz, by.x = "first_names", by.y = "name", all.x = TRUE)
ที่ส่งคืนผลลัพธ์ที่ถูกต้อง:
first_name gender
1 abby either
2 bill either
3 john M
4 madison M
5 zzz <NA>
แต่ฉันต้องการทำสิ่งนี้ใน dplyr เพราะฉันใช้แพ็คเกจนั้นสำหรับการจัดการข้อมูลอื่น ๆ ทั้งหมดของฉัน by
ตัวเลือกdplyr สำหรับ*_join
ฟังก์ชันต่างๆช่วยให้ฉันระบุชื่อคอลัมน์ได้เพียงชื่อเดียว แต่ฉันต้องระบุสองคอลัมน์ ฉันกำลังมองหาสิ่งนี้:
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"))
วิธีการเข้าร่วมประเภทนี้โดยใช้ dplyr คืออะไร?
(ไม่เป็นไรว่าคลังข้อมูล Kantrowitz เป็นวิธีที่ไม่ดีในการระบุเพศฉันกำลังดำเนินการปรับปรุงให้ดีขึ้น แต่ฉันต้องการให้สิ่งนี้ได้ผลก่อน)