library(stringr)

Como criar chaves hash

Primeiro você precisa ler uma base de dados para o R no formato de csv, atenção para o codificação do arquivo (fileEnconding)

Lendo a base de dados

# o comando carrega primeiro o nome do arquivo
# depois você coloca qual o separador utilizado pelo arquivo
# colClasses = "character" para que tudo já seja tratado como texto
# fileEnconding depende da leitura, para arquivos em PT varia entre latin1 e utf8
base <- read.csv("votacao_secao_2020_TO.csv", sep = ";", colClasses = "character", fileEncoding = "latin1")

Juntando as colunas com dados pessoais

Nessa base de dados temos alguns dados pessoais do candidato e quantidade de votos que recebeu. Para fins pedagógicos iremos utilizar o CD_MUNICIPIO, para ilustrar um dado numérico, o NM_VOTAVEL, para ilustrar um dado tipo de texto.

# o comando paste0 junta duas colunas dentro de uma só, que aqui chamamos de chaveid
base$chaveid <- paste0(base$CD_MUNICIPIO, base$NM_VOTAVEL)
# agora iremos retirar todos os espaços para ficar mais curto
base$chaveid <- gsub(" ", "", base$chaveid)

Agora transformando em hash

Primeiro precisamos carregar o pacote “digest”, se vc ainda não possui o pacote instale-o

#instale apenas uma vez
#install.packages("digest")
#ativando o pacote
library(digest)
#criando um hash com 32 caracter
base$hash <- sapply(base$chaveid, digest, algo="md5")
#criando um hash com 8 caracter
base$hash2 <- sapply(base$chaveid, digest, algo="crc32")
#visualizando
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(rmarkdown)
#pra visualizar
base2 <- base %>% group_by(CD_MUNICIPIO, NM_VOTAVEL, hash, hash2) %>% count()
paged_table(base2)

Exportando a base pseudo-anônima

Agora você pode exportar a base sem as variáveis que identificam a pessoa, que no nosso caso foram o código do município e o nome.

#primeiro retire as colunas que identificam
baseano <-subset(base, select = -c(CD_MUNICIPIO,NM_VOTAVEL, chaveid))
#exporte a base com sufixo anonimo
write.table(baseano, "votacao_secao_2020_TO_anonima.csv", sep=";", row.names = F)