gpt4 book ai didi

r - dplyr : NSE in joins (by)

转载 作者:行者123 更新时间:2023-12-03 23:10:27 28 4
gpt4 key购买 nike

我很难弄清楚如何使用 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 <- names(rlang::quos_auto_name(id))[2]) 似乎有点复杂,我正在寻找一个更简单的解决方案。那是 - 顺便说一下 - 由莱昂内尔亨利提供......谢谢:)

最佳答案

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

关于r - dplyr : NSE in joins (by),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58518021/

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