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)
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)
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)
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)