我有两个数据框,其中包含包含文本的列。现在我想通过在文本列之间使用(不完美)匹配来合并这些数据帧。如果是数据帧1的文本列的单元格1具有文本值,该文本值包含类似于数据帧2的文本列的cel 2的文本值中的(部分)字的(部分)字,然后是I想要使用这些单元格合并数据帧。 R中最好的方法是什么?
我不确定我的问题是否足够明确,但如果是这样,有没有人知道R包或可以帮助我进行这种合并的函数?
非常感谢提前!
答案 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