dplyr:加入 NSE(通过)

dplyr: NSE in joins (by)

我很难弄清楚如何使用 dplyr::left_join 和 NSE 连接两个表。问题是我无法为 'by' 提供正确的值。我想我现在已经找到了解决方案,但感觉我正在以一种非常复杂的方式来做。所以,如果您知道 easier/more 优雅的解决方案,请告诉我:)

这就是我正在做的事情:

# some data
df <- dplyr::tibble(x=1:10,
                    y=LETTERS[1:10],
                    z=LETTERS[11:20])

# some function
test_fun <- function(df,id){
  id <- rlang::enquo(id)
  join_var <- names(rlang::quos_auto_name(id))[2] # is there an easier way?
  # not important: doing some stuff
  df1 <- df %>%
    dplyr::select(!!id,y)
  df2 <- df %>%
    dplyr::select(!!id,z)
  # join using prepared join_var
  df1 %>%
    dplyr::left_join(df2,setNames(join_var,join_var))
}

test_fun(df,id=x)

由于我被要求提供更多上下文和更多解释以更好地理解我的问题,我将尝试在此处提供更多信息:

NSE是非标准评估的缩写。我的目标是构建一个函数,根据用户可以定义的变量连接到数据集。主要问题是 dplyr::left_join 中的参数不接受引用的变量(NSE 参数),所以我必须找到一个解决方法。我找到 (join_var <- names(rlang::quos_auto_name(id))[2]) 的方式似乎有点复杂,我正在寻找更简单的解决方案。顺便说一下,那是莱昂内尔·亨利提供的……谢谢 :)

您正在寻找 join_var <- rlang::as_name(id)