Sql dplyr中更复杂的连接
在SQL中,可以使用以下命令执行联接: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查询类似的效果,方法是在连接之前将子字符
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)