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
다양한 *_join
함수에 대한 dplyr 옵션을 사용하면 하나의 열 이름 만 지정할 수 있지만 두 개를 지정해야합니다. 나는 다음과 같은 것을 찾고 있습니다.
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 말뭉치가 성별을 식별하는 나쁜 방법이라는 사실은 신경 쓰지 마십시오. 더 나은 구현을 위해 노력하고 있지만이 작업을 먼저 수행하고 싶습니다.)