2015-01-16 206 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 
相關問題