Dplyr kullanarak birleştirmek istediğim iki veri çerçevem var. Biri, ilk isimleri içeren bir veri çerçevesidir.
test_data <- data.frame(first_name = c("john", "bill", "madison", "abby", "zzz"),
stringsAsFactors = FALSE)
Diğer veri çerçevesi, cinsiyeti tanımlayan Kantrowitz isimleri külliyatının temizlenmiş bir versiyonunu içerir. İşte minimal bir örnek:
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"))
Esasen test_data
tabloyu kullanarak tablodan ismin cinsiyetine bakmak istiyorum kantrowitz
. Ben bir işlevi içine bu soyut gidiyorum Çünkü encode_gender
, ben kullanılacak gidiyor veri kümesindeki sütunun adını bilmez ve bunu olacağını garanti edemez böylece name
olduğu gibi kantrowitz$name
.
Temelde RI birleştirme işlemini şu şekilde gerçekleştirir:
merge(test_data, kantrowitz, by.x = "first_names", by.y = "name", all.x = TRUE)
Bu, doğru çıktıyı döndürür:
first_name gender
1 abby either
2 bill either
3 john M
4 madison M
5 zzz <NA>
Ama bunu dplyr'de yapmak istiyorum çünkü diğer tüm veri işlemelerim için bu paketi kullanıyorum. by
Çeşitli *_join
işlevler için dplyr seçeneği yalnızca bir sütun adı belirlememe izin veriyor, ancak iki tane belirtmem gerekiyor. Bunun gibi bir şey arıyorum:
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 kullanarak bu tür bir birleştirme gerçekleştirmenin yolu nedir?
(Kantrowitz külliyatının cinsiyeti belirlemenin kötü bir yolu olduğunu boşverin. Daha iyi bir uygulama üzerinde çalışıyorum, ancak önce bunun çalışmasını istiyorum.)