Skip to content

Meetup material from R-Ladies São Paulo (the one I teached about stringR)

Notifications You must be signed in to change notification settings

analuspi/MeetUp-Strings

Repository files navigation

<title>Manipulação de Strings no R</title> <textarea id="source"> class: center, middle, inverse, title-slide

Manipulação de Strings no R

Ana Lu Spinola, R-ladies

15 de outubro de 2018


class: center, middle

O que vamos fazer?

Algumas definições

Ver as funções básicas

Falar de expressões regulares


Básico de strings

Use ' ou " para delimitar strings. Aspas duplas são preferiveis.

s1 &lt;- "Hello, World"
s1
## [1] "Hello, World"
s2 &lt;- 'Eu não gosto de aspas simples, mas vou usar para mostrar que dá no mesmo'
s2
## [1] "Eu não gosto de aspas simples, mas vou usar para mostrar que dá no mesmo"
s3 &lt;- c("mulher", "linda", "poderosa")
s3
## [1] "mulher"   "linda"    "poderosa"

Alguns caracteres especiais

Para incluir caracteres especiais em uma string, você tem que que sinaliza-los com uma barra invertida:

<table> <tbody> <tr> <th>Símbolo</th> <th>Significado</th> </tr> <tr> <td>\n</td> <td>parágrafo</td> </tr> <tr> <td>\t</td> <td>tab</td> </tr> <tr> <td>"</td> <td>aspas</td> </tr> <tr> <td>'</td> <td>apóstrofe</td> </tr> </tbody> </table>

Use ?"'" para listar todos

O pacote stringr do R

No R base, temos várias funções para trabalhar com strings

As vantagens do stringr são:

<ul> <li>possibiliade de trabalhar em várias línguas <li>não considera NA como caracter <li>possibilidade de trabalhar com expressões regulares <\ul>

library(stringr)

A função str_lenght

s3
## [1] "mulher"   "linda"    "poderosa"
str_length(s3)
## [1] 6 5 8

Combinando strings

str_c("Eu", "adoro", "chocolate")
## [1] "Euadorochocolate"
str_c("Eu", "adoro", "chocolate", sep = " ")
## [1] "Eu adoro chocolate"

Combinando vetores e strings

s3
## [1] "mulher"   "linda"    "poderosa"
str_c(s3, collapse = ",")
## [1] "mulher,linda,poderosa"
str_c(1:3, s3)
## [1] "1mulher"   "2linda"    "3poderosa"
str_c(str_c(1:3, ". "), s3)
## [1] "1. mulher"   "2. linda"    "3. poderosa"

Separando strings

s3
## [1] "mulher"   "linda"    "poderosa"
str_sub(s3, start = 1, end = 2)
## [1] "mu" "li" "po"
str_sub(s3, -3, -2)
## [1] "he" "nd" "os"

Caixa alta e caixa baixa

str_to_lower(s1)
## [1] "hello, world"
str_to_upper(s1)
## [1] "HELLO, WORLD"
str_to_title(s1)
## [1] "Hello, World"

Expressões Regulares (regex)

s3
## [1] "mulher"   "linda"    "poderosa"
str_detect(s3, "l")
## [1]  TRUE  TRUE FALSE
str_detect(s3, "a")
## [1] FALSE  TRUE  TRUE

Nem tudo é o que parece...

<img src="img/nutella-no-pote-de-feijão.jpg" alt="feijão no pote de nutella">

#Nem tudo é o que parece...

Sempre que um \ aparecer em uma expressão regular, você deve escrevê-lo como \\

Use writeLines() para ver como R vê sua string de fato:

writeLines("\\.")
## \.
writeLines("\\ é uma barra invertida")
## \ é uma barra invertida

Caracteres especiais em regex

spec1 &lt;- "AnaLu." 

str_detect(spec1, "Lu.") #ponto como regex
## [1] TRUE
str_detect(spec1, "Lu\\.") #ponto como ponto
## [1] TRUE
spec2 &lt;- "R-ladies\\AnaLu" #queremos uma barra só

str_detect(spec2, "s\\\\A") #queremos achar uma barra entre s e A
## [1] TRUE

4 barras para localizar 1??

.center[

  • Estamos progurando por uma barra invertida (#4)
  • Usamos uma barra invertida para indicar que é uma barra e não um caracter special (#3)
  • Usamos duas barras para indicar a regex (#2 e #1) ]

Marcadores (âncoras)

<ul> <li> ^ indica começo do string <li> $ indica fim do string

s3
## [1] "mulher"   "linda"    "poderosa"
str_detect(s3, "a$") #palavras que terminam com a
## [1] FALSE  TRUE  TRUE
str_extract(s3, "^.u" ) #palavras com u na segunda posição
## [1] "mu" NA   NA

class: center, midle

Obrigada!

GitHub: analuspi </textarea>

<script src="https://remarkjs.com/downloads/remark-latest.min.js"></script> <script>var slideshow = remark.create({ "highlightStyle": "github", "highlightLines": true, "countIncrementalSlides": false }); if (window.HTMLWidgets) slideshow.on('afterShowSlide', function (slide) { window.dispatchEvent(new Event('resize')); }); (function() { var d = document, s = d.createElement("style"), r = d.querySelector(".remark-slide-scaler"); if (!r) return; s.type = "text/css"; s.innerHTML = "@page {size: " + r.style.width + " " + r.style.height +"; }"; d.head.appendChild(s); })();</script> <script> (function() { var i, text, code, codes = document.getElementsByTagName('code'); for (i = 0; i < codes.length;) { code = codes[i]; if (code.parentNode.tagName !== 'PRE' && code.childElementCount === 0) { text = code.textContent; if (/^\\\((.|\s)+\\\)$/.test(text) || /^\\\[(.|\s)+\\\]$/.test(text) || /^\$\$(.|\s)+\$\$$/.test(text) || /^\\begin\{([^}]+)\}(.|\s)+\\end\{[^}]+\}$/.test(text)) { code.outerHTML = code.innerHTML; // remove continue; } } i++; } })(); </script> <script> (function () { var script = document.createElement('script'); script.type = 'text/javascript'; script.src = 'https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-MML-AM_CHTML'; if (location.protocol !== 'file:' && /^https?:/.test(script.src)) script.src = script.src.replace(/^https?:/, ''); document.getElementsByTagName('head')[0].appendChild(script); })(); </script>

About

Meetup material from R-Ladies São Paulo (the one I teached about stringR)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages