gpt4 book ai didi

r - 加入 dplyr 时如何指定 x 和 y 的列名称?

转载 作者:行者123 更新时间:2023-12-03 05:19:28 25 4
gpt4 key购买 nike

我有两个数据框,我想使用 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"))

我本质上想使用 kantrowitz 表从 test_data 表中查找姓名的性别。因为我要将其抽象为函数 encode_gender,所以我不知道将要使用的数据集中的列的名称,因此我不能保证它会是 name,如 kantrowitz$name

在基础 R 中,我会这样执行合并:

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 中执行此操作,因为我正在使用该包进行所有其他数据操作。各种 *_join 函数的 dplyr by 选项仅允许我指定一个列名,但我需要指定两个。我正在寻找这样的东西:

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 语料库是识别性别的糟糕方法。我正在研究更好的实现,但我想先让它发挥作用。)

最佳答案

此功能已在 dplyr v0.3 中添加。现在,您可以将命名字符向量传递给 left_join(以及其他连接函数)中的 by 参数,以指定每个数据帧中要连接的列。根据原始问题中给出的示例,代码将是:

left_join(test_data, kantrowitz, by = c("first_name" = "name"))

关于r - 加入 dplyr 时如何指定 x 和 y 的列名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21888910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com