Pacote Stringr

Hellen Sonaly Silva Alves
hellensilva.estat@gmail.com
http://lattes.cnpq.br/4845253626067527

Gabriel Graciano de Mendonça
gabriel.gracianom@ufrpe.br
http://lattes.cnpq.br/5536790670777917


Introdução

Neste tutorial, vamos conhecer o pacote stringr, que faz parte do ecossistema tidyverse e é utilizado para facilitar a manipulação de textos (strings) no R.

O stringr oferece funções simples, consistentes e fáceis de memorizar para tarefas comuns, como: - trabalhar com textos, - localizar padrões, - substituir palavras, - contar caracteres, - e extrair informações de strings.

Antes de começar, é importante garantir que você tenha o R e o RStudio instalados em seu computador.
Caso ainda não tenha, consulte o tutorial abaixo:

Se você é iniciante e ainda não está familiarizado com o ambiente do RStudio, recomendo também a leitura do material introdutório:

Este tutorial é voltado para iniciantes e tem como objetivo apresentar, de forma prática, as principais funções do pacote stringr.

Strings

Strings são sequências de caracteres, como letras, números, espaços e símbolos, utilizadas para representar textos no R.

O pacote stringr foi criado por :contentReferenceoaicite:0 com o objetivo de facilitar a manipulação de variáveis do tipo string. Ele simplifica tarefas comuns relacionadas a textos, como criação, modificação, identificação de padrões e remoção de espaços, de forma mais intuitiva e eficiente.

Vantagens do pacote stringr

  • Sintaxe simples, o que facilita a leitura e a memorização do código;
  • Funções vetorizadas, permitindo trabalhar com vários elementos ao mesmo tempo;
  • Resultados rápidos e eficientes, pois o pacote é implementado em C e C++.

Como utilizar o stringr

Antes de começar a utilizar o pacote stringr, é necessário instalá-lo e carregá-lo no R

install.packages("stringr")
## 
##   There is a binary version available but the source version is later:
##         binary source needs_compilation
## stringr  1.5.1  1.6.0             FALSE
library(stringr)

As funções do pacote stringr utilizam o prefixo str_, o que facilita sua identificação no R.
Ao digitar str_ e pressionar a tecla TAB, é possível visualizar todas as funções disponíveis, juntamente com uma breve descrição de suas finalidades.

Funções básicas

Exemplo utilizando a função str_length()

A função str_length() retorna o número de caracteres de cada string presente em um vetor.

É importante destacar a diferença entre str_length() e length(): - str_length() informa o número de caracteres de cada elemento do vetor; - length() retorna o comprimento do vetor, ou seja, a quantidade de elementos.

vetor <- c("Estatistica", "Matematica", "Biometria", "Stringr", "Caracteres")
str_length(vetor)
## [1] 11 10  9  7 10
length(vetor)
## [1] 5

Observação: espaços em branco também são considerados caracteres

Exemplo utilizando as funções str_to_upper(), str_to_lower() e str_to_title()

As funções str_to_upper(), str_to_lower() e str_to_title() são utilizadas para modificar a caixa das letras em strings.

  • str_to_upper(): converte todos os caracteres para caixa alta (maiúsculas);
  • str_to_lower(): converte todos os caracteres para caixa baixa (minúsculas);
  • str_to_title(): converte a primeira letra de cada palavra para caixa alta.

Exemplo prático

texto <- "Testando as funcoes"
str_to_upper(texto)
## [1] "TESTANDO AS FUNCOES"
str_to_lower(texto)
## [1] "testando as funcoes"
str_to_title(texto)
## [1] "Testando As Funcoes"

Exemplo utilizando a função str\_trim

A função str_trim() é utilizada para remover espaços em branco no início e no final das strings.

A presença de espaços excedentes pode causar problemas na análise de dados, como a criação de categorias diferentes para valores que deveriam ser iguais.

estado <- c("PB ", "PB", "PE ", " PE ", "PB", "PE ")
as.factor(estado)
## [1] PB   PB   PE    PE  PB   PE  
## Levels:  PE  PB PB  PE
estadoLimpo <- str_trim(estado)
as.factor(estadoLimpo)
## [1] PB PB PE PE PB PE
## Levels: PB PE

Exemplo utilizando a função str_sub()

A função str_sub() é utilizada quando precisamos extrair uma parte específica de uma string.
Ela possui dois argumentos principais:

  • start: indica a posição inicial da extração;
  • end: indica a posição final da extração.

É possível utilizar valores negativos, que contam as posições a partir do final da string.

Exemplo

alunos <- c("01-Aluno", "02-Aluno", "03-Aluno")
str_sub(alunos, start = 4) 
## [1] "Aluno" "Aluno" "Aluno"
str_sub(alunos, end = 2)
## [1] "01" "02" "03"
str_sub(alunos, end = -7)
## [1] "01" "02" "03"

Neste caso, o valor negativo em end indica que a contagem é feita a partir do final da string, removendo os últimos 6 caracteres.

Exemplo utilizando a função str_c()

A função str_c() é semelhante à função paste0() (da base do R) e é utilizada para concatenar strings, ou seja, unir textos.

Exemplo

texto <- "O maior São João do mundo é em"
cidade <- " Campina Grande"
str_c(texto, cidade)
## [1] "O maior São João do mundo é em Campina Grande"

Exemplo utilizando a função str\_sort e str\_rank

A função str_sort() permite ordenar strings de forma flexível, como por ordem alfabética.

Exemplo com str\_sort

vetor <- c("banana", "manga", "laranja", "abacaxi")
stringr::str_sort(vetor)
## [1] "abacaxi" "banana"  "laranja" "manga"

Exemplo com str\_rank

A função str\_rank() retorna a classificação (posição) de cada elemento do vetor após a ordenação.

stringr::str_rank(vetor)
## [1] 2 4 3 1

Expressões Regulares (REGEX)

Expressões regulares, também conhecidas como REGEX, são padrões utilizados para identificar, localizar ou manipular textos.
Elas permitem reconhecer conjuntos de caracteres, palavras ou formatos específicos por meio de uma sintaxe própria.

O pacote stringr utiliza expressões regulares em diversas funções, especialmente para busca, substituição e validação de textos.


Metacaracteres

As expressões regulares utilizam alguns sinais especiais, chamados de metacaracteres, para representar padrões em strings.
Os metacaracteres mais utilizados são:

  • . → representa qualquer caractere;

  • ? → indica que o item anterior é opcional (0 ou 1 vez);

  • + → combina o item anterior uma ou mais vezes;

  • * → combina o item anterior zero ou mais vezes;

  • ^ → corresponde ao início da string;

  • $ → corresponde ao final da string;

  • | → operador lógico “ou”;

  • \\ → utilizado para escapar um caractere especial;

  • [ ] → cria uma classe de caracteres.

Classes de caracteres

Uma classe de caracteres representa um conjunto de caracteres que pode corresponder a qualquer um dos elementos definidos dentro da classe.
Essas classes podem incluir letras, números, símbolos ou intervalos de caracteres.

Principais classes predefinidas

  • [[:lower:]] → letras minúsculas (a–z), incluindo letras com acentuação;

  • [[:upper:]] → letras maiúsculas (A–Z), incluindo letras com acentuação;

  • [[:alpha:]] → letras (minúsculas e maiúsculas);

  • [[:digit:]] → números de 0 a 9;

  • [[:punct:]] → sinais de pontuação e caracteres especiais;

  • [[:blank:]] → espaços e tabulações;

  • [[:space:]] → espaços, tabulações e quebras de linha;

  • [[:alnum:]] → letras e números;

  • [[:graph:]] → caracteres visíveis (letras, números e pontuação);

  • [[:print:]] → caracteres imprimíveis (inclui espaços).

Principais exemplos de REGEX

Abaixo estão alguns exemplos comuns de expressões regulares utilizadas com o pacote stringr:

  • 'par$' → reconhece textos que terminam exatamente com "par";
  • '^par' → reconhece textos que começam exatamente com "par";
  • 'p ?ar' → reconhece "par" com ou sem espaço entre "p" e "a";
  • "par" → reconhece "par" em letras minúsculas;
  • "PAR" → reconhece "PAR" em letras maiúsculas.

Funções com uso de REGEX

Exemplo utilizando a função str_detect()

A função str_detect() retorna um valor lógico (TRUE ou FALSE), indicando se cada elemento da string atende ou não ao padrão definido pela expressão regular (REGEX).

Exemplo

REGEX <- c("par", "impar", "parente", "PAR")
str_detect(REGEX, pattern = "par$")
## [1]  TRUE  TRUE FALSE FALSE

No exemplo acima, o padrão “par$” identifica apenas as strings que terminam exatamente com “par”.

str_detect(REGEX, pattern = "^par")
## [1]  TRUE FALSE  TRUE FALSE

Neste caso, o padrão “^par” identifica as strings que começam com “par”.

str_detect(REGEX, pattern = "p?ar")
## [1]  TRUE  TRUE  TRUE FALSE

Aqui, o metacaractere ? indica que a letra “p” é opcional, ou seja, o padrão reconhece strings com “ar” ou “par”.

str_detect(REGEX, pattern = "par")
## [1]  TRUE  TRUE  TRUE FALSE

O padrão “par” reconhece apenas as ocorrências em letras minúsculas, não identificando “PAR”.

str_detect(REGEX, pattern = "PAR")
## [1] FALSE FALSE FALSE  TRUE

Neste caso, o padrão reconhece apenas as ocorrências em letras maiúsculas.

Utilizando o operador OU (|)

Também é possível utilizar o operador | (OU) para reconhecer mais de um padrão ao mesmo tempo.

str_detect(REGEX, pattern = "par|paren")
## [1]  TRUE  TRUE  TRUE FALSE

Nesse exemplo, a função identifica strings que contêm “par” ou “paren”.

Exemplo utilizando as funções str_extract() e str_extract_all()

As funções str_extract() e str_extract_all() são utilizadas para extrair padrões específicos de uma string com o auxílio de expressões regulares.

  • str_extract() retorna a primeira ocorrência do padrão encontrado em cada string;
  • str_extract_all() retorna todas as ocorrências do padrão em cada string.

Exemplo

municipios <- c(
  "Campina Grande",
  "Joao Pessoa",
  "Abreu e Lima",
  "Boa Viagem",
  "Sao Paulo",
  "Rio de Janeiro"
)

str_extract(municipios, "[[:alpha:]]+")
## [1] "Campina" "Joao"    "Abreu"   "Boa"     "Sao"     "Rio"

Exemplo utilizando as funções str_replace() e str_replace_all()

As funções str_replace() e str_replace_all() são utilizadas para substituir padrões em strings por outros valores.
Elas são muito úteis no processo de padronização e limpeza de dados textuais, especialmente quando uma mesma informação aparece escrita de várias formas.

  • str_replace() substitui apenas a primeira ocorrência do padrão;
  • str_replace_all() substitui todas as ocorrências encontradas.

Exemplo

municipio <- c(
  "CAMPINA GRANDE", "Campina Grande", "CG",
  "CAMP.GRANDE", "CG", "CG",
  "CAMP.GRANDE", "CAMPINA GRANDE"
)

municipio %>% 
  str_replace("CAMP\\.", "CAMPINA ") %>%
  str_replace("CG", "CAMPINA GRANDE") %>%
  str_to_title()
## [1] "Campina Grande" "Campina Grande" "Campina Grande" "Campina Grande"
## [5] "Campina Grande" "Campina Grande" "Campina Grande" "Campina Grande"

Observação: o ponto (.) é um metacaractere do REGEX que representa qualquer caractere. Por isso, foi necessário escapá-lo utilizando \. para que ele seja interpretado literalmente.

Exemplo utilizando as funções str_replace_all() e str_squish()

Neste exemplo, vamos trabalhar com um vetor de números de telefone que apresentam caracteres especiais e espaços inconsistentes.

telefone <- c(
  "(81)94002- 8922",
  "(83) 99113 -1313",
  "(83) 99876-5432",
  "(81) 99812 - 3456"
)

t1 <- str_replace_all(telefone, "[()\\-]", " ")
t1
## [1] " 81 94002  8922"   " 83  99113  1313"  " 83  99876 5432"  
## [4] " 81  99812   3456"

Após a substituição dos parênteses e do hífen por espaços, podemos observar que o vetor ainda apresenta excesso e inconsistência de espaçamentos.

Para resolver esse problema, utilizamos a função str_squish(), que remove espaços excedentes, deixando apenas um único espaço entre os elementos.

str_squish(t1)
## [1] "81 94002 8922" "83 99113 1313" "83 99876 5432" "81 99812 3456"

Exemplo utilizando a função str_split()

As funções str_split() e str_split_fixed() são utilizadas para dividir uma string em várias partes, a partir de um delimitador.

  • str_split() retorna uma lista, pois cada string pode ser dividida em um número diferente de partes;
  • str_split_fixed() retorna uma matriz, sendo necessário informar o número de divisões desejadas.

Exemplo

hino <- c(
  "Ouviram do Ipiranga as margens plácidas,
   De um povo heroico, o brado retumbante,
   E o Sol da liberdade, em raios fúlgidos
   Brilhou no céu da pátria nesse instante,
   Se o penhor dessa igualdade
   Conseguimos conquistar com braço forte
   Em teu seio, ó liberdade,
   Desafia o nosso peito a própria morte"
)

str_split(hino, fixed(","))
## [[1]]
## [1] "Ouviram do Ipiranga as margens plácidas"                                                    
## [2] "\n   De um povo heroico"                                                                    
## [3] " o brado retumbante"                                                                        
## [4] "\n   E o Sol da liberdade"                                                                  
## [5] " em raios fúlgidos\n   Brilhou no céu da pátria nesse instante"                             
## [6] "\n   Se o penhor dessa igualdade\n   Conseguimos conquistar com braço forte\n   Em teu seio"
## [7] " ó liberdade"                                                                               
## [8] "\n   Desafia o nosso peito a própria morte"

Exemplo utilizando as funções str_remove() e str_remove_all()

Como o próprio nome sugere, as funções str_remove() e str_remove_all() são utilizadas para remover padrões de uma string com base em expressões regulares.

  • str_remove() remove apenas a primeira ocorrência do padrão encontrado;
  • str_remove_all() remove todas as ocorrências do padrão.

Exemplo

hino <- c(
  "Somos campeoes, Da Paraiba somos o melhor, Somos campeoes, Treze querido tu es o maior"
)

str_remove(hino, ",")
## [1] "Somos campeoes Da Paraiba somos o melhor, Somos campeoes, Treze querido tu es o maior"

No exemplo acima, apenas a primeira vírgula é removida da string.

str_remove_all(hino, ",")
## [1] "Somos campeoes Da Paraiba somos o melhor Somos campeoes Treze querido tu es o maior"

Já neste caso, todas as vírgulas presentes na string são removidas.

Exemplo utilizando a função abjutils::rm_accent()

A função rm_accent(), do pacote abjutils, é utilizada para remover acentos de caracteres em strings.
Ela é particularmente útil quando trabalhamos com textos em português e precisamos padronizar a escrita, facilitando comparações, buscas e análises de dados textuais.

Exemplo

texto <- c("bônus", "apresentação", "férias")
abjutils::rm_accent(texto)
## [1] "bonus"        "apresentacao" "ferias"
frase <-c("É fácil mentir com estatísticas, mas é difícil dizer a verdade sem elas")
abjutils::rm_accent(frase)
## [1] "E facil mentir com estatisticas, mas e dificil dizer a verdade sem elas"

Conclusão

Com base nos exemplos apresentados, podemos concluir que o pacote stringr é uma ferramenta fundamental para a manipulação de strings no R. Ele oferece métodos simples e eficientes para realizar operações como busca, extração, substituição e manipulação de padrões em dados textuais.

Além disso, o stringr contribui significativamente para o aumento da produtividade, pois simplifica tarefas complexas, automatiza processos repetitivos e reduz a probabilidade de erros durante a análise de dados. Dessa forma, o pacote se torna um aliado essencial no tratamento e na preparação de dados textuais para análises mais robustas.