【发布时间】:2020-01-30 12:57:29
【问题描述】:
我正在尝试围绕 dplyr::left_join 编写一个函数,以简化我需要执行多次的重复过程。
考虑以下代码:
testdf <- data.frame(X1 = c("A", "B", "C"), X2 = c(1,2,3))
testdf2 <- data.frame(Y1 = c("a", "b", "c"), Y2 = c(1,2,3))
testdf3 <- dplyr::left_join(testdf, testdf2, by=c("X2" = "Y2"))
这种方法有效,因为 testdf3 将是一个由 X1、X2 和 Y1 组成的数据框。 现在,考虑以下函数:
test_function <- function(df1, df2, col1, col2){
output_dataframe <- dplyr::join(df1, df2, by=(col1 = col2))
return(output_dataframe)
}
output1 <- test_function(testdf, testdf2, "X2", "Y2")
此代码向我抛出以下错误:
“错误:by 不能包含 LHS 中缺少的连接列 col1
这可能是一件小事,因为在我看来它不会正确地将列名变量复制到 left_join 函数中,但我已经为这个问题苦苦挣扎了很长一段时间了。
我尝试了以下方法:
test_function <- function(df1, df2, col1, col2){
helper <- c(col1 = col2)
output_dataframe <- dplyr::join(df1, df2, by=helper)
return(output_dataframe)
}
但是,错误是相同的,我不知道如何解决这个问题。
我需要一个函数来压缩我需要重复执行的几个步骤,因此在另一个函数中执行 left_join 将帮助我保持代码的清洁和可读性。有谁知道如何解决这个问题?
【问题讨论】:
-
谢谢,我一开始没有找到这些。似乎 dplyr 在这里需要引用的参数,可以使用 enquo() 函数提供。