将对象名称从省略号作为字符串传递到left_join

康拉德

背景

我有一个简单的辅助函数,该函数适用left_join于传递给其他表的任何数量的表,gather并返回一个对象。

# Settings ----------------------------------------------------------------

library("tidyverse")
set.seed(123)

# Data --------------------------------------------------------------------

sample_one <-
    tibble(
        column_a = c(1, 2),
        column_b = runif(n = 2),
        column_other = runif(n = 2)
    )
sample_two <-
    tibble(
        column_a = c(1, 2),
        column_b = runif(n = 2),
        column_other = runif(n = 2)
    )
sample_three <-
    tibble(
        column_a = c(1, 2),
        column_b = runif(n = 2),
        column_other = runif(n = 2)
    )

# Function ----------------------------------------------------------------

left_join_on_column_a <- function(keep_var, ...) {
    keep_var <- enquo(keep_var)
    dots <- list(...)
    clean_dfs <- map(dots, select, !!keep_var, "column_a")
    reduce(.x = clean_dfs,
           .f = left_join,
           "column_a") %>%
        gather(key = "model_type", !!keep_var, -column_a)
}

# Test --------------------------------------------------------------------

left_join_on_column_a(keep_var = column_b, sample_one, sample_two, sample_three)

问题

我希望能够以编程方式修改以下suffix参数left_join

后缀如果x和y中存在非联接重复变量,则将这些后缀添加到输出中以消除歧义。应该是长度为2的字符向量。

当前结果

# A tibble: 6 x 3
  column_a model_type column_b
     <dbl> <chr>         <dbl>
1        1 column_b.x   0.288 
2        2 column_b.x   0.788 
3        1 column_b.y   0.940 
4        2 column_b.y   0.0456
5        1 column_b     0.551 
6        2 column_b     0.457 

所需结果

# A tibble: 6 x 3
  column_a model_type      column_b
     <dbl> <chr>            <dbl>
1        1 sample_one       0.288 
2        2 sample_one       0.788 
3        1 sample_two       0.940 
4        2 sample_two       0.0456
5        1 sample_three     0.551 
6        2 sample_three     0.457 

model_type列反映通过传递的对象的名称...

尝试次数

我试图捕获传入的对象的名称,...但它不是命名对象,因此没有任何意义:

left_join_on_column_a <- function(keep_var, ...) {
    keep_var <- enquo(keep_var)
    dots <- list(...)
    table_names <- names(dots)
    clean_dfs <- map(dots, select, !!keep_var, "column_a")
    reduce(.x = clean_dfs,
           .f = left_join,
           "column_a", 
           table_names) %>%
        gather(key = "model_type", !!keep_var, -column_a)
}
D b

也许重命名,column_b这样您就不必担心后缀

left_join_on_column_a <- function(keep_var, common_var, ...) {
    nm = unname(sapply(rlang::enexprs(...), as.character))
    keep_var <- as.character(substitute(keep_var))
    common_var = as.character(substitute(common_var))

    foo = function(x, y) {
        x %>% select(!!common_var, !!y := !!keep_var)
    }

    reduce(.x = Map(foo, list(...), nm),
           .f = left_join,
           common_var) %>%
        gather("model_type", !!keep_var, -!!common_var)
}

left_join_on_column_a(column_b, column_a, sample_one, sample_two, sample_three)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 JavaScript 中使用对象名称的字符串将对象作为参数传递?

用省略号截断字符串的理想方法

在AS2中将对象名称转换为字符串

将对象名称转换为匿名函数中tidyverse链中的字符串

如何使用反射从对象名称作为字符串访问对象

从 JavaScript 中的对象中提取对象名称作为字符串

在树枝中使用字符串变量作为对象名称

如何使用字符串的值作为对象名称?

如何使用字符串的值作为对象名称

在PHP中使用字符串作为对象名称

如何在 JAVA 中使用字符串变量作为对象名称?

如何使用提取的字符串作为已经存在的枚举对象名称?

在 Python 中使用列表中的字符串作为对象名称

在 Python 中使用列表中的字符串作为对象名称

将对象名称传递给事件

JS:如果字符串长度超过 50 个字符,则添加省略号

Javascript:通过将对象的路径作为字符串传递给对象,以获取深层价值

python-3:对象名称为字符串

如何将对象名称值对作为参数传递给方法?

将所有有趣的arg /省略号折叠成字符串

如何在文本字符串Python中查找省略号?

使用省略号截断 <a> 中的字符串,但最后保留 img - 没有 JS

在React16中的长字符串中间添加省略号

我的字符串前后的省略号文本[React Native]

Angular2选择框将对象作为字符串传递

使用路由器浏览并将对象作为查询字符串传递

json.dumps 将对象作为字符串而不是 json 传递

将perl中的字符串截断为带有尾随省略号的子字符串

使用&hellip在树枝对象中插入省略号字符