首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用quosure作为by参数连接数据集

使用quosure作为by参数连接数据集
EN

Stack Overflow用户
提问于 2018-01-25 18:42:39
回答 2查看 1.2K关注 0票数 10

我正在尝试编写一个自定义函数,它将使用一个商作为left_join()函数的"by = c()“部分中的参数连接两个数据集。

下面是我当前对该函数的尝试,它在"by =c(!left_index=!right_index)“部分失败。left_join期望引用这些论点,引用商号使!!

代码语言:javascript
复制
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))
}

我在下面编写了这个功能如何工作的工作示例:

代码语言:javascript
复制
# 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,我将非常感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-25 19:06:40

c()函数不支持rlang,所以您必须采用一种更传统的方法来构建参数。你能做到的

代码语言:javascript
复制
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)
}
票数 15
EN

Stack Overflow用户

发布于 2020-05-01 16:57:26

另一种将列传递到与"LHS" = "RHS"一起进行连接的函数的方法如下所示:

代码语言:javascript
复制
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      2
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48449799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档