2015-01-16 166 views
0

我有两个数据集:比较字符串近似匹配

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 

考虑在这种情况下,我们希望找到的所有名称数据1的名称。

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

例如:

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

这是非常不清楚与参考“数据集”上,然后在“清单”的下方。另外它不可重现。这些数据框是?名单?什么是期望的输出?请使用'dput'来提供每一组字词 –

+0

@RichardScriven我不认为它很重要它是列表或其他...我可以更改它的列表或data.frame如果你想。我期望的结果是,如果我们从list1和list2中找到一个匹配项,只需打印list2的id即可。 – rwrwerwer

+3

这不是我*想要那样。这更多的是遵循SO提出问题的指导方针。 –

回答

6

假设你有:

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 
相关问题