我有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指出的那样编辑输出。
您正在向后进行LIKE
比较,并且应检查mo
中的t1
列是否显示为nt
中t2
列的子字符串:
sql <- "SELECT t1.mo, t2.nt, t2.monthid
FROM t1
INNER JOIN t2 ON t2.nt like '%' || t1.mo || '%'"
result <- sqldf(sql)
还请注意,我已重构查询以使用正确的explicit联接,这是编写SQL的首选方法。
[请注意,我在结果集中获得了一条超出预期的额外记录,但这是因为第一张表中的Feb
与第二张表中的Jan Feb
和February
都匹配。如果您只希望在那里进行一场比赛,则应说明原因。