不完美的字符串匹配

时间:2012-02-08 15:39:17

标签: r

说我有两列名字。第一列中的所有名称都在第二列中,但是以随机顺序排列,其中一些名称不是完美匹配。所以也许在一列中有John Smith这个名字以及第二个John_smith或JonSmith。是否有任何相当简单的R方式来执行“最佳匹配”?

1 个答案:

答案 0 :(得分:10)

考虑到这样的一些数据:

df<-data.frame(x=c('john doe','john smith','sally struthers'),y=c('John Smith','John_smith','JonSmith'))

您可以通过一些gsubtolower

获得很长的路要走
df$y.fix <- gsub('[[:punct:]]', ' ', df$y)
df$y.fix <- gsub(' ', '', df$y.fix)
df$y.fix <- tolower(df$y.fix)
df$x.fix <- tolower(gsub(' ', '', df$x))

然后agrep就是你想要的:

> agrep(df$x.fix[2], df$y.fix)
[1] 1 2 3

有关更复杂的混淆字符串,请参阅this post from last week