与R的模糊联接产生重复的列,并且没有联接的值

与R的模糊联接产生重复的列,并且没有联接的值,r,dplyr,R,Dplyr,我正在修改这个示例,我想将一些测试结果加入到现有会话数据中,但我知道测试可能是由同一个用户在创建会话之前或之后三个小时进行的 但是,我得到了重复的user\u id列,尽管在by选项中指定了这些列,并且这些值本身不会添加到数据框中: 库(tidyverse) 图书馆(lubridate) #> #>附加包装:“lubridate” #>以下对象已从“package:base”屏蔽: #> #>日期 库(模糊连接) 会话=tribble( ~user\u id、~session\u id、~

我正在修改这个示例,我想将一些测试结果加入到现有会话数据中,但我知道测试可能是由同一个用户在创建会话之前或之后三个小时进行的

但是,我得到了重复的
user\u id
列,尽管在
by
选项中指定了这些列,并且这些值本身不会添加到数据框中:

库(tidyverse)
图书馆(lubridate)
#> 
#>附加包装:“lubridate”
#>以下对象已从“package:base”屏蔽:
#> 
#>日期
库(模糊连接)
会话=tribble(
~user\u id、~session\u id、~session\u创建于,
1,1,“2019-01-01T15:30:00”,
1,2,“2019-01-02T00:00:30”,
1,3,“2019-01-04T12:30:00”
) %>%
变异时间(“会话时间创建时间”,即日期时间)
测试=tribble(
~user\u id、~test\u id、~test\u created\u at、~test\u value、,
1,7,“2019-01-01T15:28:00”,“foo”,
1,8,“2019-01-01T23:59:30”,“酒吧”
) %>%
突变时间(“测试时间创建时间”,即日期时间)%>%
变异(
开始=在+小时(3)时创建的测试,
结束=在-小时(3)创建的测试
)
会话%>%
模糊左联合(
测验,
by=c(
“用户id”=“用户id”,
“在”=“开始”处创建会话”,
已在“=”结束处创建会话
),
match_fun=list(`==`,`>=`,``A tible:3 x 9
#>用户\u id.x会话\u id会话\u在用户\u id.y测试\u id处创建
#>                                   
#>1199-01-01 15:30:00北美
#>21 21 2019-01-02 00:00:30北美
#>2011-01-04 12:30:00北美
#>#…还有4个变量:test_created_at,test_value,
#>#开始,结束
由(v0.2.1)于2019年5月17日创建

为什么会这样?我该怎么做才能让它工作

我应该在跑步时补充一点:

会话%>%
左连接(测试,由=c(“用户id”=“用户id”))
我得到了正确的列,但当然没有得到正确的测试结果。当我运行此操作时,我得到了预期的结果,但它似乎效率低下:

会话%>%
左联合(测试)%>%
过滤器(在-3小时时创建的测试)
过滤器(在+小时(3)创建的测试>=在创建的会话)
我知道这是:

[…]设计假设是,在模糊连接过程中,保持连接的两侧能够理解其匹配方式是很有用的,并且没有特定的逻辑来处理折叠它们以获得相等


在实现这种重复数据消除逻辑之前,您所能做的就是继续并删除您知道是重复的所有列,例如通过
select(-ends_with(“.y”))
并重命名以
.x
结尾的代码以丢失其后缀。

您最后一块连接并过滤的代码正是我要建议的。您是对的,它不是超高效的,但只要数据不是很大,就应该可以。或者,您可以将SQL不等式连接与
sqldf
程序包一起使用ge。不幸的是,数据量太大,这个特定的连接给了我一个内存不足的错误。我不确定
fuzzyjoin
是否会更节省内存,但我想至少让示例运行一下,因为我不明白发生了什么。也许我还会提交一份错误报告。在这里发布了一份错误报告: