class: center, middle
Algumas definições
Ver as funções básicas
Falar de expressões regulares
Use ' ou " para delimitar strings. Aspas duplas são preferiveis.
s1 <- "Hello, World"
s1
## [1] "Hello, World"
s2 <- '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 <- c("mulher", "linda", "poderosa")
s3
## [1] "mulher" "linda" "poderosa"
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>
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)
s3
## [1] "mulher" "linda" "poderosa"
str_length(s3)
## [1] 6 5 8
str_c("Eu", "adoro", "chocolate")
## [1] "Euadorochocolate"
str_c("Eu", "adoro", "chocolate", sep = " ")
## [1] "Eu adoro chocolate"
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"
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"
str_to_lower(s1)
## [1] "hello, world"
str_to_upper(s1)
## [1] "HELLO, WORLD"
str_to_title(s1)
## [1] "Hello, World"
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...
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
spec1 <- "AnaLu."
str_detect(spec1, "Lu.") #ponto como regex
## [1] TRUE
str_detect(spec1, "Lu\\.") #ponto como ponto
## [1] TRUE
spec2 <- "R-ladies\\AnaLu" #queremos uma barra só
str_detect(spec2, "s\\\\A") #queremos achar uma barra entre s e A
## [1] TRUE
.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) ]
<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
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>