如何在R中的SQLDF中使用LIKE在多个数据框中搜索文本

问题描述 投票:0回答:1

我有2个带有文本的数据框,想比较部分字符串。我正在寻找的是表2中的ID,t1.mo和monthid。

t1 <- data.frame("id"=1:4,"mo"=c("Jan","Feb","Apr","Mar"))
t2 <- data.frame("id"=1:4, "nt"= c("January","Jan Feb","February","Mar"),"monthid" = 5:8)

sqldf("select t1.mo,t2.nt,t2.monthid from t1, t2 where t1.mo like '%' || t2.nt || '%'")

我已经尝试过,sqldf("select t1.mo,t2.mo from t1, t2 where t1.mo like '%Feb%'")及其工作但是当引用t2时,它不起作用。

T1.id  t1.mo  t2.monthid
1       Jan    5
2       Feb    6
4       Mar    8

感谢您的任何帮助。

如Tim Biegeleisen指出的那样编辑输出。

r string sqldf
1个回答
0
投票

您正在向后进行LIKE比较,并且应检查mo中的t1列是否显示为ntt2列的子字符串:

sql <- "SELECT t1.mo, t2.nt, t2.monthid
        FROM t1
        INNER JOIN t2 ON t2.nt like '%' || t1.mo || '%'"
result <- sqldf(sql)

还请注意,我已重构查询以使用正确的explicit联接,这是编写SQL的首选方法。

Demo

[请注意,我在结果集中获得了一条超出预期的额外记录,但这是因为第一张表中的Feb与第二张表中的Jan FebFebruary都匹配。如果您只希望在那里进行一场比赛,则应说明原因。

© www.soinside.com 2019 - 2024. All rights reserved.