4.3 Pacote stringr para trabalhar com textos

O R básico não tem uma sintaxe consistente para trabalhar com textos. O pacote stringr ajuda a realizar todas as tarefas básicas de manipulação de texto, exigindo que o usuário estude apenas uma sintaxe.

O stringr também é construído sobre a biblioteca ICU, implementada em C e C++, apresentando resultados rápidos e confiáveis.

4.3.1 Regras básicas

  • As funções começam com str_. Caso esqueça o nome de uma função, basta digitar stringr::str_ e apertar TAB para ver quais são as opções.
  • O primeiro argumento da função é sempre uma string.

4.3.2 Funções do stringr

  • str_detect() retorna TRUE se a regex é compatível com a string e FALSE caso contrário.
txt <- c("acho que sim", "acho que não")
str_detect(txt, "que")
#> [1] TRUE TRUE
str_detect(txt, "sim")
#> [1]  TRUE FALSE
  • str_lengh() retorna o comprimento de uma string.
str_length('decisão favorável')
#> [1] 17
  • str_trim() retira espaços e quebras de linha/tabs no início ou final de string.
string <- '\n  essa         string é muito suja                           \n'
c(string, str_trim(string))
#> [1] "\n  essa         string é muito suja                           \n"
#> [2] "essa         string é muito suja"
  • str_replace() e str_replace_all() substituem um padrão (ou todos) encontrado para um outro padrão
string <- 'Recurso parcialmente parcialmente procedente'
str_replace(string, 'parcialmente ', '')
#> [1] "Recurso parcialmente procedente"
str_replace_all(string, 'parcialmente ', 'x ')
#> [1] "Recurso x x procedente"
str_replace(string, '(parcialmente )+', 'x ')
#> [1] "Recurso x procedente"
str_replace_all('string     com    muitos espaços', ' +', ' ') # tirar espaços extras
#> [1] "string com muitos espaços"
  • str_match() e str_match_all() extrai pedaços da string identificados pela regex. Caso queira extrair somente a parte identificada, use parênteses.
frases <- c('a roupa do rei', 
            'de roma', 
            'o rato roeu')

str_match(frases, 'roe')
#>      [,1] 
#> [1,] NA   
#> [2,] NA   
#> [3,] "roe"
str_match_all(frases, 'ro')
#> [[1]]
#>      [,1]
#> [1,] "ro"
#> 
#> [[2]]
#>      [,1]
#> [1,] "ro"
#> 
#> [[3]]
#>      [,1]
#> [1,] "ro"
str_match(frases, 'o (ro)')
#>      [,1]   [,2]
#> [1,] NA     NA  
#> [2,] NA     NA  
#> [3,] "o ro" "ro"
  • str_split() separa uma string em várias de acordo com um separador.
string <- 'eu sei, usar virgulas, de forma, perfeita'

str_split(string, ', ')
#> [[1]]
#> [1] "eu sei"        "usar virgulas" "de forma"      "perfeita"
str_split(string, ', ', simplify = TRUE)
#>      [,1]     [,2]            [,3]       [,4]      
#> [1,] "eu sei" "usar virgulas" "de forma" "perfeita"
# avançado: quebrar por um padrão, mas mantendo ele na string
# look arounds
str_split(string, '(?<=, )')
#> [[1]]
#> [1] "eu sei, "        "usar virgulas, " "de forma, "      "perfeita"
  • str_sub() extrai uma parte da string de acordo com os índices.
string <- 'quero pegar só uma parte disso'
str_sub(string, 13, 14)
#> [1] "só"
str_sub(string, -5, -1) # usar números negativos para voltar do final da string
#> [1] "disso"
indices <- str_locate(string, 'parte')
indices
#>      start end
#> [1,]    20  24
str_sub(string, indices) # pode ser útil usar com str_locate.
#> [1] "parte"
  • str_subset() retorna somente as strings compatíveis com a regex.
frases <- c('a roupa do rei', 'de roma', 'o rato roeu')
str_subset(frases, 'd[eo]')
#> [1] "a roupa do rei" "de roma"