【发布时间】:2019-07-16 08:33:42
【问题描述】:
我可以使用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))
作品:使用字符串作为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
不起作用:使用 object 作为 first 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
作品:使用object作为secondby参数的字符串
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
包:
dplyr 0.8.0.1
【问题讨论】:
-
我不确定,但我认为这与此有关:
# Note that only the key from the LHS is kept。现在由于firstname在 LHS 中不可用,您需要设计一些机制来匹配它。我的努力是徒劳的。 -
不是您的问题的答案,而是一种解决方法:
left_join(orig, tojoin, by = 'names<-'("name2", firstname))