比较字符串以获得近似匹配

时间:2015-01-16 00:54:31

标签: r pattern-matching match

我有两个数据集:

data1就像

  id           name
1  1         toyota
2  2        walmart
3  3 fox ad company

data2就像

  id                      name
1  1             sales walmart
2  2 fox advertisement company
3  3              metro toyota

在这个实例中考虑我们希望以data2的名字找到data1的所有名称。

如何做到这一点?如果我们在data1和data2之间找到匹配项,我们将打印data1的id。

例如:

  id           name data2
1  1         toyota     3
2  2        walmart     1
3  3 fox ad company     2

1 个答案:

答案 0 :(得分:7)

假设你有:

one <- c("toyota","walmart","fox ad company")
two <- c("sales walmart","fox advertisement company","metro toyota")

您可以使用adist计算的最小字符串距离提取匹配项。这可能是错误的,但它会给你一个开始。请参阅?adist,了解如何编辑此内容,仅查看字符的添加,替换或插入。

max.col(-adist(one,two))
#[1] 3 1 2

匹配好了:

data.frame(one, two=two[max.col(-adist(one,two))])
#             one                       two
#1         toyota              metro toyota
#2        walmart             sales walmart
#3 fox ad company fox advertisement company