在R/Python中,部分匹配两个具有公共列(按字)的数据帧

在R/Python中,部分匹配两个具有公共列(按字)的数据帧,python,regex,r,agrep,Python,Regex,R,Agrep,我有两个数据帧作为csv文件,其中df1的行数多于df2: Df1 Name Count xxx yyyyyy bbb cccc 15 fffdd 444 ggg 20 kkbbb ccc dd 29p 5 22 cc pbc2 kmn3 b23 efgh 4 ccccccccc sss qqqq 2 Df2 Name xxx yyyyy

我有两个数据帧作为csv文件,其中
df1
的行数多于
df2

Df1

Name                         Count
xxx yyyyyy bbb cccc           15
fffdd 444 ggg                 20
kkbbb ccc dd 29p              5
22 cc pbc2 kmn3 b23 efgh      4
ccccccccc sss qqqq            2
Df2

Name
xxx yyyyyy bbb cccc
ccccccccc sss qqqq pppc
22 cc pbc2 kmn3 b23,efgh
我想通过匹配前两个或三个单词来进行部分匹配(近似/模糊匹配)。基本上,输出如下:

输出:

Name                       Count
xxx yyyyyy bbb cccc         15
22 cc pbc2 kmn3 b23 efgh    4
ccccccccc sss qqqq          2

通过尝试精确匹配,我丢失了一些行。我在R中尝试了
agrep
,但不知怎么的,它不起作用,模糊匹配相当慢。请给我推荐一种在R或python中实现这一点的方法。感谢您的帮助

在R中,可以使用
agrep
进行模糊匹配。您可以使用
max.distance
参数设置匹配允许的最大距离

DF1[sapply(DF2$Name, agrep, DF1$Name, max.distance = 0.2), ]

#                       Name Count
# 1      xxx yyyyyy bbb cccc    15
# 5       ccccccccc sss qqqq     2
# 4 22 cc pbc2 kmn3 b23 efgh     4

数据:

DF1 <- read.table(text = "Name                         Count
'xxx yyyyyy bbb cccc'           15
'fffdd 444 ggg '                20
'kkbbb ccc dd 29p'              5
'22 cc pbc2 kmn3 b23 efgh'      4
'ccccccccc sss qqqq'           2", header = TRUE, stringsAsFactors = FALSE)

DF2 <- read.table(text = "Name
'xxx yyyyyy bbb cccc'
'ccccccccc sss qqqq pppc'
'22 cc pbc2 kmn3 b23,efgh'", header = TRUE, stringsAsFactors = FALSE)

DF1谢谢!!我使用的是相同的代码,但是当数据量很大时,它的速度非常慢。你知道其他更快的方法吗?@warwick12不幸的是,模糊匹配速度很慢。您可以尝试一种迭代方法,从可能的匹配集中删除匹配项,以减少每个步骤中的比较次数。当然,你必须记住原来的行号。回答得好。stringdist()是否仅适用于数字匹配?谢谢!我得到了这个错误。您知道此错误的可能原因吗:
[.default
(xj,i)中的错误:无效的下标类型“list”?@warwick12我想算法找到了一个以上的字符串匹配项。