我正在尝试编写一个自定义函数,它将使用一个商作为left_join()函数的"by = c()“部分中的参数连接两个数据集。
下面是我当前对该函数的尝试,它在"by =c(!left_index=!right_index)“部分失败。left_join期望引用这些论点,引用商号使!!
join_by_quosure <- function(data, left_index, var_to_impute, right_index){
require(dplyr)
left_index <- enquo(left_index)
right_index <- enquo(right_index)
var_to_impute <- enquo(var_to_impute)
left_join(data,
data %>% select(!!right_index, !!var_to_impute),
by = c(!!left_index = !!right_index))
}我在下面编写了这个功能如何工作的工作示例:
# join_by_quosure(data = mtcars, left_index = vs, var_to_impute = mpg, right_index = am)
left_join(mtcars,
mtcars %>% select(am, mpg),
by = c("vs" = "am"))如果有人能够深入了解如何在left_join()函数的"by = c()“部分调用quosure,我将非常感激。
发布于 2018-01-25 19:06:40
c()函数不支持rlang,所以您必须采用一种更传统的方法来构建参数。你能做到的
join_by_quosure <- function(data, left_index, var_to_impute, right_index){
require(dplyr)
left_index <- enquo(left_index)
right_index <- enquo(right_index)
var_to_impute <- enquo(var_to_impute)
by = set_names(quo_name(right_index), quo_name(left_index))
left_join(data,
data %>% select(!!right_index, !!var_to_impute),
by = by)
}发布于 2020-05-01 16:57:26
另一种将列传递到与"LHS" = "RHS"一起进行连接的函数的方法如下所示:
data("mtcars")
library(tidyverse)
function_left_join <- function(x) {
mtcars %>%
left_join(mtcars, by = names(select(., {{x}})))
}
head(function_left_join(mpg))
#> mpg cyl.x disp.x hp.x drat.x wt.x qsec.x vs.x am.x gear.x carb.x cyl.y
#> 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 6
#> 2 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 6
#> 3 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 6
#> 4 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 6
#> 5 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 4
#> 6 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 4
#> disp.y hp.y drat.y wt.y qsec.y vs.y am.y gear.y carb.y
#> 1 160.0 110 3.90 2.620 16.46 0 1 4 4
#> 2 160.0 110 3.90 2.875 17.02 0 1 4 4
#> 3 160.0 110 3.90 2.620 16.46 0 1 4 4
#> 4 160.0 110 3.90 2.875 17.02 0 1 4 4
#> 5 108.0 93 3.85 2.320 18.61 1 1 4 1
#> 6 140.8 95 3.92 3.150 22.90 1 0 4 2https://stackoverflow.com/questions/48449799
复制相似问题