我有两个数据框,它们的列都包含文本。现在我想通过在文本列之间使用(不完美)匹配来合并这些数据框。例如,如果数据框 1 的文本列的单元格 1 的文本值包含一个(a 的一部分)单词,该单词类似于数据框 2 的文本列的 cel 2 的文本值中的一个(a 的一部分)单词,然后我希望使用这些单元格合并数据框。在 R 中执行此操作的最佳方法是什么?
我不确定我的问题是否足够清楚,但如果是这样,有没有人知道可以帮助我进行这种合并的 R 包或函数?
提前谢谢了!
我有两个数据框,它们的列都包含文本。现在我想通过在文本列之间使用(不完美)匹配来合并这些数据框。例如,如果数据框 1 的文本列的单元格 1 的文本值包含一个(a 的一部分)单词,该单词类似于数据框 2 的文本列的 cel 2 的文本值中的一个(a 的一部分)单词,然后我希望使用这些单元格合并数据框。在 R 中执行此操作的最佳方法是什么?
我不确定我的问题是否足够清楚,但如果是这样,有没有人知道可以帮助我进行这种合并的 R 包或函数?
提前谢谢了!
试试这个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