Contexto
Estou limpando uma base de dados eleitorais com nomes em caixa alta, mas que em alguns anos vêm com acentos, e em outros não. Por exemplo: o mesmo “JOSÉ” também aparece como “JOSE”.
#Pacotes utilizados
library(tibble)
library(dplyr)
library(stringr)
#Exemplo caixa alta
teste_A ← tibble(
nome_A = c(“JOÃO”, “JOSÉ”, “JOAO”, “JOSE”)
)
Para uniformizar, resolvi excluir os acentos, e usei o stringr::str_replace_all, informando seus parâmetros normais, ou seja: string, pattern, replacement. Deu certo, mas o código ficou imenso, porque tive que replicar a função inteira para cada acento e para cada coluna.
#Multiplos str_replace_all:
teste_A |>
mutate(
nome_A = str_replace_all(nome_A, “Ô, “A”),
nome_A = str_replace_all(nome_A, “É”, “E”)
)
#A tibble: 4 x 1
nome_A
< chr>
1 JOAO
2 JOSE
3 JOAO
4 JOSE
Complicação
Lendo a seção de String do livro R4DS, vi que ele parametriza o str_replace_all com um vetor nomeado*, que serve de pattern e replacement.
#Trecho do livro:
With str_replace_all() you can perform multiple replacements by supplying a named vector:
x ← c(“1 house”, “2 cars”, “3 people”)
str_replace_all(x, c(“1” = “one”, “2” = “two”, “3” = “three”))
#> [1] “one house” “two cars” “three people”
Foi aí que lembrei do código de limpeza de acentos, e resolvi aplicar o modelo para deixá-lo mais conciso. Porém, não funcionou…
#Informando um vetor nomeado como parametro do str_replace_all
teste_A |>
mutate(
nome_A = str_replace_all(nome_A, c(“Ô = “A”, “É” = “E”))
)
#A tibble: 4 x 1
nome_A
< chr>
1 JOÃO
2 JOSÉ
3 JOAO
4 JOSE
Depois de muito fuçar, acabei percebendo que o código funciona com letras minúsculas:
#Exemplo em caixa baixa
teste_a ← tibble(
nome_a = c(“joão”, “josé”, “joao”, “jose”)
)
#Informando um vetor nomeado como parametro do str_replace_all
teste_a |>
mutate(
nome_a = str_replace_all(nome_a, c(“ã” = “a”, “é” = “e”))
)
#A tibble: 4 x 1
nome_a
< chr>
1 joao
2 jose
3 joao
4 jose
Dúvida
Alguém sabe por que o str_replace_all com vetor nomeado funcionou com letras minúsculas, mas não com maiúsculas? O que preciso ajustar para funcionar?
Pensei em informar algum locale, mas parece que isso não é parâmetro pra função…
*Obs.: estou chamando de “vetor nomeado”, numa tradução livre do livro da Hadley, mas não sei se é esse o nome corrente em português…