0

我有两个数据框作为 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 中执行此操作。任何帮助表示赞赏!

4

1 回答 1

2

在 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)
于 2014-12-16T10:50:20.020 回答