在R中,查找字符串在一列中与第二列的完全或部分匹配

  • 本文关键字:二列 查找 字符串 一列 r
  • 更新时间 :
  • 英文 :


我需要比较一列中8到10个字符的字符串与另一列中8到10个字符的字符串,如果至少前8个数字匹配,则在第一个字符串上添加星号。我可以管理精确匹配,但我不知道如何管理部分匹配。

有人能帮帮我吗?我有下面的代码:

tl<-c("10012908","1001290810","10111090")
trqs<-as.data.frame(tl)
tl<-c("10012908","10012910")
mfn<-as.data.frame(tl)
for(i in 1:nrow(trqs)){
if(trqs$tl[i] %in% mfn$tl){
trqs$tl[i] <-paste0(trqs$tl[i],"*")
}
}
#the result should be:
trqs$tl<-c("10012908*","1001290810*","10111090")
tl<-c("10012908","1001290810","10111090")
trqs<-as.data.frame(tl)
trqs$tl1<-c("10012908","1001290810","1090")
trqs[grep(paste(trqs$tl,collapse="|"),trqs$tl1),"tl1"]<-paste0(trqs[grep(paste(trqs$tl,collapse="|"),trqs$tl1),"tl1"],"*")
trqs

下面是使用substr匹配前8个字符的另一种方法。

首先,创建一个矢量mfn_match,它将包含感兴趣的mfndata.frame列中的前8个字符。那么你只需要做一次。

接下来,为trqstl的前8个字符至少匹配mfn_match的一个元素的那些创建一个逻辑向量trqs_match。对于这些匹配项,请添加星号。

mfn_match <- substr(mfn$tl, 1, 8)
trqs_match <- sapply(trqs$tl, function(x) substr(x, 1, 8) %in% mfn_match)
trqs$tl[trqs_match] <- paste0(trqs$tl[trqs_match], "*")
trqs

tl
1   10012908*
2 1001290810*
3    10111090

最新更新