我打算使用一个公共字符列对两个数据框进行左连接(我们称此名称列)。理想情况下,df1的name列中的所有值都应与df2的name列匹配。但是,我知道有些值可能不完全匹配,但是由于某些拼写或标点错误而部分匹配。例如。在df1中,“约翰·以西结”可以拼写为“约翰·以西结”。我想确保df1中name列的每个值都与df2 name列中的某个值匹配。在大多数情况下,会存在完全匹配,但在没有完全匹配的情况下,我也想将df1的那些值替换为部分匹配程度最高的df2的值。我已经通过重现
说明了这个问题df1 <- data.frame(name=c("John Ezekial","Mary Elizabeth","Fabio Fonini","Gael Monfils","Lucas Pouile"))
df2 <- data.frame(name=c("Aron Ramsey","John Doe","John Ezekiel","Mary Elizabeth","Fabio Fognini","Gael Monfils","Marin Cilic","Lucas Pouille","Tomas Berdych","Juan Martin Del Potro"),id=1:10)
> df1
name
1 John Ezekial
2 Mary Elizabeth
3 Fabio Fonini
4 Gael Monfils
5 Lucas Pouile
> df2
name id
1 Aron Ramsey 1
2 John Doe 2
3 John Ezekiel 3
4 Mary Elizabeth 4
5 Fabio Fognini 5
6 Gael Monfils 6
7 Marin Cilic 7
8 Lucas Pouille 8
9 Tomas Berdych 9
10 Juan Martin Del Potro 10
执行df1与df2左连接时,我得到的结果如下:
> df1 %>% left_join(df2)
Joining, by = "name"
name id
1 John Ezekial NA
2 Mary Elizabeth 4
3 Fabio Fonini NA
4 Gael Monfils 6
5 Lucas Pouile NA
我希望结果数据帧如下所示。如果没有精确匹配,则应将df1中的“名称”值替换为df2中的“名称”值。
>df3
name id
1 John Ezekiel 3
2 Mary Elizabeth 4
3 Fabio Fognini 5
4 Gael Monfils 6
5 Lucas Pouille 8
答案 0 :(得分:0)
使用Base R,您可以执行以下操作:
df2[which(adist(df1$name,df2$name)<2,T)[,2],]
name id
3 John Ezekiel 3
4 Mary Elizabeth 4
5 Fabio Fognini 5
6 Gael Monfils 6
8 Lucas Pouille 8