模糊字符串匹配和合并

时间:2015-05-08 19:04:35

标签: r merge string-matching levenshtein-distance

我正在尝试将两个数据集合并为一个字符串place,该字符串类似但在许多情况下并不完全相同。

例如,在其他数据集中可能会有像伦敦,英国和伦敦这样的记录。我想在每个记录旁边有一个匹配的分数,并将它们合并在相似度分数上(如果它大于.80则合并)。

有没有办法将两个数据集A和B与变量place合并?

第一个数据集A有四个变量:name, place, origin, ranking

第二个数据集B有三个变量:ratings, place, destinations, trip time

我想合并数据集A和数据集B.

最终合并数据集应具有以下变量: name, place, origin, ranking, ratings, destinations, trip time

我想基于数据集A进行合并(如SQL中的左连接)。我希望A的所有记录都添加了来自B的列。

1 个答案:

答案 0 :(得分:2)

stringdist library有很多功能,下面是一个使用soundex相似性的示例:

library(stringdist)

#dummy data
df1 <- data.frame(ID1=c("london","USA","UK","ball","xyz"))
df2 <- data.frame(ID2=c("lndon","US","UKS","bull","ttt"),
                  x=1:5)

#get soundex
df1$soundex <- phonetic(df1$ID1, method = c("soundex"), 
                        useBytes = FALSE)
df2$soundex <- phonetic(df2$ID2, method = c("soundex"), 
                        useBytes = FALSE)

#merge on soundex column, keep all rows from df1
merge(df1, df2, by="soundex", all.x=TRUE)

#output
#   soundex    ID1   ID2  x
# 1    B400   ball  bull  4
# 2    L535 london lndon  1
# 3    U200    USA    US  2
# 4    U200    USA   UKS  3
# 5    U200     UK    US  2
# 6    U200     UK   UKS  3
# 7    X200    xyz  <NA> NA