dplyr`left_join()`不能作为LHS变量使用字符对象

wfm*_*key 6 join r left-join dplyr

我可以连接两个包含两个不同名称变量的数据集dplyr::left_join(..., by = c("name1" = "name2").

我想使用角色对象加入left_join(..., by = c(nameOb1 = nameOb2).奇怪的是:这适用于by = c("name1", nameOb2),但不适用于 by = c(nameOb1, "name2").

为什么是这样?

我的问题复制如下.非常感谢.

生成数据

    orig <- tibble(name1 = c("a", "b", "c"),
                   n     = c(10, 20, 30))  

    tojoin <- tibble(name2 = c("a", "b", "c"),
                     pc    = c(.4, .1, .2))    
Run Code Online (Sandbox Code Playgroud)

Works:为by参数使用字符串

    left_join(orig, tojoin, by = c("name1" = "name2"))

    # A tibble: 3 x 3
      name1     n    pc
      <chr> <dbl> <dbl>
    1 a        10   0.4
    2 b        20   0.1
    3 c        30   0.2
Run Code Online (Sandbox Code Playgroud)

不起作用:使用object作为第一个 by参数的字符串

    firstname <- "name1"

    left_join(orig, tojoin, by = c(firstname = "name2"))

    # Error: `by` can't contain join column `firstname` which is missing from LHS
    # Call `rlang::last_error()` to see a backtrace

Run Code Online (Sandbox Code Playgroud)

Works:使用object作为第二个 by参数的字符串

    secondname <- "name2"

    left_join(orig, tojoin, by = c("name1" = secondname))

    # A tibble: 3 x 3
      name1     n    pc
      <chr> <dbl> <dbl>
    1 a        10   0.4
    2 b        20   0.1
    3 c        30   0.2
Run Code Online (Sandbox Code Playgroud)

包:

dplyr 0.8.0.1

小智 5

Hy,“left_join”函数需要在 by 参数中指定一个字符向量。在你的第二次尝试中:

firstname <- "name1"
left_join(orig, tojoin, by = c(firstname = "name2"))
Run Code Online (Sandbox Code Playgroud)

您设置的字符向量的名称firstname不适用于连接。为了解决这个问题,您可以首先生成一个命名字符向量,然后将其传递给 join 函数的 by 参数

firstname <- "name1"
join_cols = c("name2")
names(join_cols) <- firstname

dplyr::left_join(orig, tojoin, by = join_cols)
Run Code Online (Sandbox Code Playgroud)

  • 问题是 **为什么** 它不适用于“firstname”但适用于“firstname” (3认同)