Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql dplyr中更复杂的连接_Sql_R_Join_Dplyr - Fatal编程技术网

Sql dplyr中更复杂的连接

Sql dplyr中更复杂的连接,sql,r,join,dplyr,Sql,R,Join,Dplyr,在SQL中,可以使用以下命令执行联接: select x.var1, y.var2 from x left join y on substring(x.var1, 1, 5) = y.var2; 在执行联接时,可以对dplyr(R)中的变量执行类似的操作吗?或者,联接是否必须仅使用精确匹配来完成 一条评论建议创建中间变量,但我想知道是否有办法解决这个问题 (在语句上编辑以使其更清晰)没有可复制的示例很难精确,但在dplyr中,您可以使用此代码获得与SQL查询类似的效果,方法是在连接之前将子字符

在SQL中,可以使用以下命令执行联接:

select x.var1, y.var2
from x left join y
on substring(x.var1, 1, 5) = y.var2;
在执行联接时,可以对dplyr(R)中的变量执行类似的操作吗?或者,联接是否必须仅使用精确匹配来完成

一条评论建议创建中间变量,但我想知道是否有办法解决这个问题


(在语句上编辑以使其更清晰)

没有可复制的示例很难精确,但在dplyr中,您可以使用此代码获得与SQL查询类似的效果,方法是在连接之前将子字符串操作包含在管道突变中。像这样:(使用的虚拟数据当然是胡说八道)

x%
选择(var1,var2)

请提供可复制的示例和所需的输出。您可以使用
fuzzyjoin
首先使用子字符串在
x
中创建一个附加列,然后在该列上进行连接。示例中的“on”子项仅是一个过滤器。@mnmn请参阅类似的详细答案。或者,看看dplyr,或者看看这个好的,这是有意义的。你能不能也在by语句中加入mutate?比如'by.x=mutate(x,name=substr(n,1,5)),by.y=“name”',或者这不起作用吗?我认为您不能将mutate放在那里,因为by语句指定了要连接的列。如果你愿意的话,你可以把它加入到对left_join的调用中,取出管道。像这样:左联合(mutate(x,name=substr(n,1,5)),y,by=“name”)%%>%select(var1,var2)
x <- data.frame(n = c("00000000000", "111111111"), var1 = 1:2)
y <- data.frame(name= as.character(c("00000", "11111")), var2=3:4)


df <- x %>% 
  mutate(name = substr(n, 1,5)) %>%
  left_join(y, by="name") %>%
  select(var1,var2)