R使用%like%或包含

时间:2018-02-07 16:52:04

标签: r data.table

在SQL中,您可以像这样连接表:

...on table1.long_id like '%'+table2.short_id+'%'

其中long_id是一个长字符串,可能包含也可能不包含short_id,%是通配符。

有没有办法在 R 中加入,最好是 data.table ?像这样:

table1[table2, on = .(long_id %like% short_id)]

我认为它可能作为非equi连接的一部分,但无法弄清楚如何做到这一点。谢谢!

修改

我在下面添加了一个可重复的示例。

使用下面的两个数据表,我想加入longid包含shortid。

    t1<- data.table(longid=c("5-6-7", "6-4-6", "4-1-5", "4-2-9", "2-8-6"))
    t2<- data.table(shortid=c("1", "2", "3"))

我希望结果像这样

    result <- data.table(shortid=c("1", "2", "2"), longid=c("4-1-5", "4-2-9", 
    "2-8-6"))

1 个答案:

答案 0 :(得分:1)

您的数据框:

CRTPGM

使用grepl我发现id被加入

t1<- data.table(longid=c("5-6-7", "6-4-6", "4-1-5", "4-2-9", "2-8-6"))
t2<- data.table(shortid=c("1", "2", "3"))

我在这里找到了匹配

TF<-sapply(as.character(t2$shortid),grepl,x=as.character(t1$longid)) #Like operation using grepl

组合输出

max1<-apply(TF,1,function(x) which(x==1)) #Find match in t1
max2<-apply(t(TF),1,function(x) which(x==1)) #Find match in t2