dplyr联接:如何进行非标准联接'col1'!=`col2`在使用数据库时?
使用数据库时,如何在dplyr中执行非标准联接dplyr联接:如何进行非标准联接'col1'!=`col2`在使用数据库时?,r,database,dplyr,dbplyr,R,Database,Dplyr,Dbplyr,使用数据库时,如何在dplyr中执行非标准联接('col1'!='col2') 例子: 设置数据库: 错误:by必须是(命名的)字符向量、列表,或者对于自然联接(不建议在生产代码中使用)为NULL,不符合逻辑 当尝试使用tidyr软件包(代码如下)解决此问题时,我收到一条错误消息: library(tidyr) dbtableA %>% expand(col1,col2) %>% left_join(dbtableA, by = 'col1') %>% fil
('col1'!='col2')
例子:
设置数据库:
错误:by
必须是(命名的)字符向量、列表,或者对于自然联接(不建议在生产代码中使用)为NULL,不符合逻辑
当尝试使用tidyr软件包(代码如下)解决此问题时,我收到一条错误消息:
library(tidyr)
dbtableA %>%
expand(col1,col2) %>%
left_join(dbtableA, by = 'col1') %>%
filter(col2.x != col2.y) %>%
select(col1, col2 = col2.x) %>%
arrange(col1, col2)
错误:正在使用方法(“展开”):
没有适用于“c”类对象的“扩展”方法(“tbl\U dbi”、“tbl\U sql”、“tbl\U lazy”、“tbl”)
有人知道在使用数据库时如何在dplyr代码中编写这个连接吗?非常感谢。我想你没有正确理解
的
参数
在by=c(“col1”=“col2”)
中,=
不是和相等运算符,而是赋值运算符(R中的相等运算符是=
)。c(…)
中的表达式创建dplyr用于联接的命名字符向量(名称:col1
值:col2
)。您没有定义在连接期间进行的比较类型,比较是用dplyr硬编码的。我认为dplyr还不支持非等连接
在by=c(“col1”!=“col2”)
,=
是不等式运算符。因此,您的语句与编写by=TRUE
(这是毫无意义的)相同
另外,还可以查看有关dplyr中非等联接主题的更多讨论
tbl(con, sql("select a.col1, b.col2
from
tableA as a
inner join
tableA as b
on a.col1 <> b.col1")) %>%
arrange(col1, col2)
# Source: SQL [?? x 2]
# Database: sqlite 3.19.3 [:memory:]
# Ordered by: col1, col2
col1 col2
<chr> <dbl
1 a 2
2 a 3
3 a 4
4 b 1
5 b 3
6 b 4
7 c 1
8 c 2
9 c 4
10 d 1
# ... with more rows
tbl(con,"tableA")->dbtableA
dbtableA %>%
inner_join(dbtableA, by = c('col1' != 'col1')) %>%
select(col1, col2=col2.x) %>%
arrange(col1, col2)
library(tidyr)
dbtableA %>%
expand(col1,col2) %>%
left_join(dbtableA, by = 'col1') %>%
filter(col2.x != col2.y) %>%
select(col1, col2 = col2.x) %>%
arrange(col1, col2)