在部分匹配时合并2个data.tables

时间:2020-08-24 19:03:01

标签: r regex merge data.table

我有data.table 1,例如:

entidad                 municipio                   col1   
AGUASCALIENTES          Aguascalientes              5000
PUEBLA                  Jes�s Mar�a                 3000
VALLE                   Calvillo                    2000
JALISCO                 Pabell�n de Arteaga         1000

和data.table 2,如:

entidad                 municipio                   col2   
AGUASCALIENTES          Aguascalientes              16369
PUEBLA                  Jesus Maria                 1687
VALLE                   Calvillo                    916
JALISCO                 Pabellon de Arteaga         774

,我想使用entidadmunicipio列(如merge(dt1, dt2, by = c('entidad', 'municipio'))进行合并,在两列或仅在列municipio中使用部分匹配)。但是,问题在于data.table 1具有重音符号和奇怪的符号,因此municipio列在3种不同情况下可能会有所不同:1)带有重音符号,2)带有符号或名称略有不同(dt1中的ej'ciudad juarez'和dt2中的'Juárez')。由于我对使用字符串/字符列不是很熟悉,所以我想知道在这种情况下是否有人可以帮助我确定如何执行合并?我想从上一示例中获得以下结果:

entidad                 municipio                   col1    col2
AGUASCALIENTES          Aguascalientes              5000    16369
PUEBLA                  Jesus Maria                 3000    1687
VALLE                   Calvillo                    2000    916
JALISCO                 Pabellon de Arteaga         1000    774

1 个答案:

答案 0 :(得分:2)

您可以使用软件包中的stringdist_join函数:

library(fuzzyjoin)
stringdist_join(d1, d2,
                by = c("entidad","municipio"),
                max_dist = 2,
                method = "lv")

这给出了:

       entidad.x         municipio.x col1      entidad.y         municipio.y  col2
1 AGUASCALIENTES      Aguascalientes 5000 AGUASCALIENTES      Aguascalientes 16369
2         PUEBLA         Jes�s Mar�a 3000         PUEBLA         Jesus Maria  1687
3          VALLE            Calvillo 2000          VALLE            Calvillo   916
4        JALISCO Pabell�n de Arteaga 1000        JALISCO Pabellon de Arteaga   774

之后,您可以使用dplyr::select保留所需的列。

相关问题