如何使用(部分)文本值合并两个数据框?

时间:2013-08-09 13:19:41

标签: r reference text-mining matching

我有两个数据框,其中包含包含文本的列。现在我想通过在文本列之间使用(不完美)匹配来合并这些数据帧。如果是数据帧1的文本列的单元格1具有文本值,该文本值包含类似于数据帧2的文本列的cel 2的文本值中的(部分)字的(部分)字,然后是I想要使用这些单元格合并数据帧。 R中最好的方法是什么?

我不确定我的问题是否足够明确,但如果是这样,有没有人知道R包或可以帮助我进行这种合并的函数?

非常感谢提前!

1 个答案:

答案 0 :(得分:1)

试用RecordLinkage包。

这是一个可能的解决方案,其中合并的工作基于一般如何“关闭”两个“单词”匹配:

library(reshape2)
library(RecordLinkage)
set.seed(16)
l <- LETTERS[1:10]
ex1 <- data.frame(lets = paste(l, l, l, sep = ""), nums = 1:10)
ex2 <- data.frame(lets = paste(sample(l), sample(l), sample(l), sep = ""), 
                  nums = 11:20)
ex1
# lets nums
# 1   AAA    1
# 2   BBB    2
# 3   CCC    3
# 4   DDD    4
# 5   EEE    5
# 6   FFF    6
# 7   GGG    7
# 8   HHH    8
# 9   III    9
# 10  JJJ   10
ex2
# lets nums
# 1   GDJ   11
# 2   CFH   12
# 3   DBE   13
# 4   BED   14
# 5   FJB   15
# 6   JHG   16
# 7   AII   17
# 8   ICC   18
# 9   EGF   19
# 10  HAA   20
lets <- melt(outer(ex1$lets, ex2$lets, FUN = "levenshteinDist"))
lets <- lets[lets$value < 2, ] # adjust the "< 2" as necessary
cbind(ex1[lets$Var1, ], ex2[lets$Var2, ])
# lets nums lets nums
# 9  III    9  AII   17
# 3  CCC    3  ICC   18
# 1  AAA    1  HAA   20