我有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
,我想使用entidad
和municipio
列(如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
答案 0 :(得分:2)
您可以使用fuzzyjoin软件包中的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
保留所需的列。