stringi R 忽略重音特殊字符以匹配
stringi R ignore accents special characters to match
我有两个数据框列,一个包含带重音符号的名称,另一个不包含。我想匹配它们,但只执行完全匹配。例如:
df<-data.frame(not_accented=c("ACARAU CE","ADRIANOPOLIS PR", "AFUA PA","AMAPARI AP","AGUA CLARA MS",
"AGUA DOCE MA","AGUA NOVA RN","AGUA PRETA PE","AGUAS VERMELHAS MG",
"ALEGRETE DO PIAUI PI","ALIANCA PE","ALTO ALEGRE DO PINDARE MA","ALTO LONGA PI",
"ALVARAES AM","ALVINOPOLIS MG","AMERICA DOURADA BA","ANAGE BA","ANAJAS PA",
"ANGICAL DO PIAUI PI","ANTONIO CARLOS SC","ANTONIO DIAS MG","ANTONIO GONCALVES BA",
"ANTÔNIO JOÃO MS","example","example2"))
df2<-data.frame(accented=c("ACARAÚ CE","ADRIANÓPOLIS PR", "AFUÁ PA","ÁGUA BRANCA DO AMAPARI AP","ÁGUA CLARA MS",
"ÁGUA DOCE DO MARANHÃO MA","ÁGUA NOVA RN","ÁGUA PRETA PE","ÁGUAS VERMELHAS MG",
"ALEGRETE DO PIAUÍ PI","ALIANÇA PE","ALTO ALEGRE DO PINDARÉ MA","ALTO LONGÁ PI",
"ALVARÃES AM","ALVINÓPOLIS MG","AMÉRICA DOURADA BA","ANAGÉ BA","ANAJÁS PA",
"ANGICAL DO PIAUÍ PI","ANTÔNIO CARLOS SC","ANTÔNIO DIAS MG","ANTÔNIO GONÇALVES BA",
"ANTONIO JOAO MS","example","example2"))
df %>% filter(df$not_accented %in% df2$accented)
看到df中只保留了“example”和“example2”。我尝试使用以下解决方案,但考虑到我的数据集的大小,它的效率非常低。
df$not_accented<- stri_replace_all_regex(df$not_accented,
pattern=c("ACARAU CE","ADRIANOPOLIS PR", "AFUA PA","AMAPARI AP","AGUA CLARA MS",
"AGUA DOCE MA","AGUA NOVA RN","AGUA PRETA PE","AGUAS VERMELHAS MG",
"ALEGRETE DO PIAUI PI","ALIANCA PE","ALTO ALEGRE DO PINDARE MA","ALTO LONGA PI",
"ALVARAES AM","ALVINOPOLIS MG","AMERICA DOURADA BA","ANAGE BA","ANAJAS PA",
"ANGICAL DO PIAUI PI","ANTONIO CARLOS SC","ANTONIO DIAS MG","ANTONIO GONCALVES BA",
"ANTONIO JOAO MS"),
replacement=c("ACARAÚ CE","ADRIANÓPOLIS PR", "AFUÁ PA","ÁGUA BRANCA DO AMAPARI AP","ÁGUA CLARA MS",
"ÁGUA DOCE DO MARANHÃO MA","ÁGUA NOVA RN","ÁGUA PRETA PE","ÁGUAS VERMELHAS MG",
"ALEGRETE DO PIAUÍ PI","ALIANÇA PE","ALTO ALEGRE DO PINDARÉ MA","ALTO LONGÁ PI",
"ALVARÃES AM","ALVINÓPOLIS MG","AMÉRICA DOURADA BA","ANAGÉ BA","ANAJÁS PA",
"ANGICAL DO PIAUÍ PI","ANTÔNIO CARLOS SC","ANTÔNIO DIAS MG","ANTÔNIO GONÇALVES BA",
"ANTONIO JOAO MS"),
vectorize=FALSE)
df %>%
filter(df$not_accented %in% stringi::stri_trans_general(df2$accented, 'LATIN-ASCII'))
not_accented
1 ACARAU CE
2 ADRIANOPOLIS PR
3 AFUA PA
4 AGUA CLARA MS
5 AGUA NOVA RN
6 AGUA PRETA PE
7 AGUAS VERMELHAS MG
8 ALEGRETE DO PIAUI PI
9 ALIANCA PE
10 ALTO ALEGRE DO PINDARE MA
11 ALTO LONGA PI
12 ALVARAES AM
13 ALVINOPOLIS MG
14 AMERICA DOURADA BA
15 ANAGE BA
16 ANAJAS PA
17 ANGICAL DO PIAUI PI
18 ANTONIO CARLOS SC
19 ANTONIO DIAS MG
20 ANTONIO GONCALVES BA
21 example
22 example2
我有两个数据框列,一个包含带重音符号的名称,另一个不包含。我想匹配它们,但只执行完全匹配。例如:
df<-data.frame(not_accented=c("ACARAU CE","ADRIANOPOLIS PR", "AFUA PA","AMAPARI AP","AGUA CLARA MS",
"AGUA DOCE MA","AGUA NOVA RN","AGUA PRETA PE","AGUAS VERMELHAS MG",
"ALEGRETE DO PIAUI PI","ALIANCA PE","ALTO ALEGRE DO PINDARE MA","ALTO LONGA PI",
"ALVARAES AM","ALVINOPOLIS MG","AMERICA DOURADA BA","ANAGE BA","ANAJAS PA",
"ANGICAL DO PIAUI PI","ANTONIO CARLOS SC","ANTONIO DIAS MG","ANTONIO GONCALVES BA",
"ANTÔNIO JOÃO MS","example","example2"))
df2<-data.frame(accented=c("ACARAÚ CE","ADRIANÓPOLIS PR", "AFUÁ PA","ÁGUA BRANCA DO AMAPARI AP","ÁGUA CLARA MS",
"ÁGUA DOCE DO MARANHÃO MA","ÁGUA NOVA RN","ÁGUA PRETA PE","ÁGUAS VERMELHAS MG",
"ALEGRETE DO PIAUÍ PI","ALIANÇA PE","ALTO ALEGRE DO PINDARÉ MA","ALTO LONGÁ PI",
"ALVARÃES AM","ALVINÓPOLIS MG","AMÉRICA DOURADA BA","ANAGÉ BA","ANAJÁS PA",
"ANGICAL DO PIAUÍ PI","ANTÔNIO CARLOS SC","ANTÔNIO DIAS MG","ANTÔNIO GONÇALVES BA",
"ANTONIO JOAO MS","example","example2"))
df %>% filter(df$not_accented %in% df2$accented)
看到df中只保留了“example”和“example2”。我尝试使用以下解决方案,但考虑到我的数据集的大小,它的效率非常低。
df$not_accented<- stri_replace_all_regex(df$not_accented,
pattern=c("ACARAU CE","ADRIANOPOLIS PR", "AFUA PA","AMAPARI AP","AGUA CLARA MS",
"AGUA DOCE MA","AGUA NOVA RN","AGUA PRETA PE","AGUAS VERMELHAS MG",
"ALEGRETE DO PIAUI PI","ALIANCA PE","ALTO ALEGRE DO PINDARE MA","ALTO LONGA PI",
"ALVARAES AM","ALVINOPOLIS MG","AMERICA DOURADA BA","ANAGE BA","ANAJAS PA",
"ANGICAL DO PIAUI PI","ANTONIO CARLOS SC","ANTONIO DIAS MG","ANTONIO GONCALVES BA",
"ANTONIO JOAO MS"),
replacement=c("ACARAÚ CE","ADRIANÓPOLIS PR", "AFUÁ PA","ÁGUA BRANCA DO AMAPARI AP","ÁGUA CLARA MS",
"ÁGUA DOCE DO MARANHÃO MA","ÁGUA NOVA RN","ÁGUA PRETA PE","ÁGUAS VERMELHAS MG",
"ALEGRETE DO PIAUÍ PI","ALIANÇA PE","ALTO ALEGRE DO PINDARÉ MA","ALTO LONGÁ PI",
"ALVARÃES AM","ALVINÓPOLIS MG","AMÉRICA DOURADA BA","ANAGÉ BA","ANAJÁS PA",
"ANGICAL DO PIAUÍ PI","ANTÔNIO CARLOS SC","ANTÔNIO DIAS MG","ANTÔNIO GONÇALVES BA",
"ANTONIO JOAO MS"),
vectorize=FALSE)
df %>%
filter(df$not_accented %in% stringi::stri_trans_general(df2$accented, 'LATIN-ASCII'))
not_accented
1 ACARAU CE
2 ADRIANOPOLIS PR
3 AFUA PA
4 AGUA CLARA MS
5 AGUA NOVA RN
6 AGUA PRETA PE
7 AGUAS VERMELHAS MG
8 ALEGRETE DO PIAUI PI
9 ALIANCA PE
10 ALTO ALEGRE DO PINDARE MA
11 ALTO LONGA PI
12 ALVARAES AM
13 ALVINOPOLIS MG
14 AMERICA DOURADA BA
15 ANAGE BA
16 ANAJAS PA
17 ANGICAL DO PIAUI PI
18 ANTONIO CARLOS SC
19 ANTONIO DIAS MG
20 ANTONIO GONCALVES BA
21 example
22 example2