У меня есть два кадра данных, с которыми я хочу присоединиться, используя dplyr. Один - это кадр данных, содержащий первые имена.Как указать имена столбцов для x и y при присоединении в dplyr?
test_data <- data.frame(first_name = c("john", "bill", "madison", "abby", "zzz"),
stringsAsFactors = FALSE)
Другой фрейм данных содержит очищенную версию корпуса имен Кантровиц, идентифицирующую пол. Вот минимальный пример:
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, потому что я использую этот пакет для все мои другие манипуляции с данными. Опция dplyr by
для различных функций *_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 плохой способ определить пол. Я работаю на более эффективной реализации, но я хочу, чтобы получить эту работу первым.)
Вы не можете в данный момент, но это в списке, чтобы сделать: https://github.com/hadley/dplyr/issues/177 – hadley