【问题标题】:dplyr: NSE in joins (by)dplyr: NSE in joins (by)
【发布时间】:2019-10-23 07:49:31
【问题描述】:

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

这就是我正在做的:

# 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 中的 by-argument 不接受引用的变量(NSE 参数),因此我必须找到解决方法。我发现的方式 (join_var

【问题讨论】:

  • 请您为您正在尝试做的事情添加更多上下文,并获得预期的结果,以便其他人能够弄清楚并提供帮助(顺便说一下 NSE 是什么)?
  • 您示例中的 setNames 部分是我所缺少的,因此感谢您!

标签: r join tidyeval nse


【解决方案1】:

您正在寻找join_var &lt;- rlang::as_name(id)

【讨论】:

    猜你喜欢
    • 2016-04-01
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 2017-07-18
    相关资源
    最近更新 更多