r - Dplyr 加入 by=(a = b),其中 a 和 b 是包含字符串的变量?

标签 r dplyr

我正在尝试使用 dplyr 执行两个表的内部连接,我想我被非标准评估规则绊倒了。当使用 by=("a"= "b") 参数时,当 "a"和 "b"是实际字符串时,一切都按预期工作。这是一个有效的玩具示例:

library(dplyr)
data(iris)

inner_join(iris, iris, by=c("Sepal.Length" = "Sepal.Width"))

但是假设我将inner_join放在一个函数中:
library(dplyr)
data(iris)

myfn <- function(xname, yname) {
    data(iris)
    inner_join(iris, iris, by=c(xname = yname))
}

myfn("Sepal.Length", "Sepal.Width")

这将返回以下错误:
Error: cannot join on columns 'xname' x 'Sepal.Width': index out of bounds
我怀疑我可以做一些花哨的表达,解析,引用或取消引用来完成这项工作,但我对这些细节有点模糊。

最佳答案

您可以使用

myfn <- function(xname, yname) {
    data(iris)
    inner_join(iris, iris, by=setNames(yname, xname))
}
?inner_join 中建议的语法的文件
by = c("a"="b")   # same as by = c(a="b")

有点误导,因为这两个值都不是正确的字符值。您实际上创建了一个命名的字符向量。动态设置等号左边的值与右边的不同。您可以使用 setNames()动态设置向量的名称。

关于r - Dplyr 加入 by=(a = b),其中 a 和 b 是包含字符串的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28399065/

相关文章:

r - 如何将 y 轴更改为美元格式并避免使用科学记数法?

r - r 中的逆概率权重

r - 从日期和小时格式更改为数字格式

r - 将 csv 文件导入 R - 数值读取为字符

r - 在列中找到最近的前一个负值

r - 将数据框从每列的最小值扩展到最大值

r - 使列表的每个元素都有自己的行(基于列值的列表)

r - 是否有类似 expand.grid 矩阵输出的函数

r - R 中带有动画包的循环 GIF

r - 最新R版本dplyr汇总功能问题