说我有两列名字。第一列中的所有名称都在第二列中,但是以随机顺序排列,其中一些名称不是完美匹配。所以也许在一列中有John Smith这个名字以及第二个John_smith或JonSmith。是否有任何相当简单的R方式来执行“最佳匹配”?
答案 0 :(得分:10)
考虑到这样的一些数据:
df<-data.frame(x=c('john doe','john smith','sally struthers'),y=c('John Smith','John_smith','JonSmith'))
您可以通过一些gsub
和tolower
:
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。