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)
。
我很难弄清楚如何使用 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)
。