1 - Exercícios todas as semanas (até a semana 8)
1 - Exercícios todas as semanas (até a semana 8)
2 - Entrega via Slack.
1 - Exercícios todas as semanas (até a semana 8)
2 - Entrega via Slack.
3 - Regras para entrega atrasada: perde um ponto por dia de atraso.
1 - Exercícios todas as semanas (até a semana 8)
2 - Entrega via Slack.
3 - Regras para entrega atrasada: perde um ponto por dia de atraso.
4 -40% da Nota Final vem destes exercícios.
1 - Exercícios todas as semanas (até a semana 8)
2 - Entrega via Slack.
3 - Regras para entrega atrasada: perde um ponto por dia de atraso.
4 -40% da Nota Final vem destes exercícios.
Leia os tutoriais.
Abra o RStudio e pratique com os códigos dos tutoriais.
Leia os tutoriais.
Abra o RStudio e pratique com os códigos dos tutoriais.
Pratique com as leituras indicadas e exercícios.
Leia os tutoriais.
Abra o RStudio e pratique com os códigos dos tutoriais.
Pratique com as leituras indicadas e exercícios.
Workflow: RStudio e Scripts.
Como Interagir com R.
Pacotes em R.
Ajuda em R.
Objetos e Classes
Operadores Booleanos
Estrutura de Dados
Manipulação Básica de Dados.
Exportar e Importar Bancos de Dados.
Software de código aberto.
Superior (se não apenas comparável) às alternativas comerciais.
Disponível em todas as plataformas (Unix, Windows, Linux).
Como resultado de ser uma linguagem de dados aberta, se você fizer sua análise em R, qualquer pessoa poderá replicá-la facilmente.
Não apenas para estatística, mas também programação de uso geral.
O RStudio é a principal interface gráfica do usuário (GUI) e o ambiente de desenvolvimento integrado (IDE) que facilita o uso do R.
Fonte para figura: Rochele Terman's Intro to CSS Book
o prompt >
aparece um símbolo maior que. Copie e cole o código abaixo em seu Console e click Enter.
2+2
## [1] 4
R usa +
quando o código é dividido em várias linhas e R ainda espera mais código.
# Este Código Retornará um +incompleto <- "Eu sou um objeto incompleto
Uma linha de código geralmente não termina até que R encontre um parâmetro ou pontuação de parada apropriado que conclua algum código, como parêntese fechado fechado )
, colchete ]
, colchete }
ou aspas `
Abrir um script novo clicando na aba File
-> New File
-> R Script
O Script envia código diretamente para o console.
Abrir um script novo clicando na aba File
-> New File
-> R Script
O Script envia código diretamente para o console.
command + enter
(Mac) ou Ctrl + enter
(PC) com o cursor na linha para rodar o script.Abrir um script novo clicando na aba File
-> New File
-> R Script
O Script envia código diretamente para o console.
command + enter
(Mac) ou Ctrl + enter
(PC) com o cursor na linha para rodar o script.# Rode estas operação em um script. # Hashtags permite você comentar seu código. 2^22*22/2
Um conjunto de funções organizadas em torno de um tema.
As vezes provêm dados.
Um conjunto de funções organizadas em torno de um tema.
As vezes provêm dados.
Uma pasta em seu computador.
Um conjunto de funções organizadas em torno de um tema.
As vezes provêm dados.
Uma pasta em seu computador.
Um sinal de bondade de outros programadores.
Um conjunto de funções organizadas em torno de um tema.
As vezes provêm dados.
Uma pasta em seu computador.
Um sinal de bondade de outros programadores.
São instalados apenas uma vez:
install.packages()
Um conjunto de funções organizadas em torno de um tema.
As vezes provêm dados.
Uma pasta em seu computador.
Um sinal de bondade de outros programadores.
São instalados apenas uma vez:
install.packages()
Ativados em toda sessão de R:
library()
install.packages("devtools", force=TRUE)
library(devtools)
install_github("silvadenisson/electionsBR")
# Ajuda específica.?mean # Help para a função mean.help(mean)# Ajuda mais geral: busca todas as ocorrências do nome da função. ??mean
Google: nome do função/pacote + texto na mensagem de erro.
Remova as informações específicas do usuário e dos dados primeiro!
Veja se você consegue encontrar exemplos que produzem e não produzem o erro. Experimente o código de outras pessoas, mas tente entendê-los. Não copie e cole.
Tende entender a solução. Copiar e Colar não resolver seu problema.
Peça base do R. Objetos são criados atribuindo determinado dado a um determinado nome, e você pode acessá-los exatamente por nome atribuído.
Tudo que existe no R é um objeto.
(assignment operator) <-
# Variáveis Numéricasx <- 5y <- 7# Variáveis de Texto.nome <- "Tiago Ventura"
=
para criar objetos?=
para criar objetos?Sim. Mas...
=
para criar objetos?Sim. Mas...
=
para criar objetos?Sim. Mas...
mean(x=c(5, 7))
ls()
## [1] "nome" "x" "y"
rm(y)
print(nome)
## [1] "Tiago Ventura"
nome <- "Tiago Augusto Ventura"
Casa objeto em R possui uma Classe. Em síntese, a classe descreve qual tipo de valores esse objeto está armazenando. Principais classes:
Character
Numeric
Interger
Logical
Example | Tipo |
---|---|
a , swc | Character |
2, 3, 15 | Numeric |
1, 2 | Interger |
FALSE, TRUE | Logical |
class()
class(3)
## [1] "numeric"
class(TRUE)
## [1] "logical"
meu_numero_da_sorte= "13"class(meu_numero_da_sorte)
## [1] "character"
class(meu_numero_da_sorte==13)
## [1] "logical"
is.numeric(2)
## [1] TRUE
is.logical(TRUE)
## [1] TRUE
is.character("2")
## [1] TRUE
is.integer(1L)
## [1] TRUE
Classes de objetos em R também podem ser alteradas usando as funções as.class()
# Cria Objetonum_1_5 <- c(1, 2, 3, 4, 5)# Altera a classechar_1_5 <- as.character(num_1_5)# Checandoclass(char_1_5)
## [1] "character"
class(num_1_5)
## [1] "numeric"
# Ouas.numeric("25")
## [1] 25
Vamos praticar um pouco o que aprendemos até aqui. O que os comandos abaixo retornarão? Qual o resultado e porquê?
install.packages(tidyverse)
false <- "FALSE"false <- as.logical(false)class(false)
mean(x = sample(1:50, 5)) == mean(x) # TRUE ou FALSE
<div class="countdown" id="timer_611c3e06" style="top:0;right:0;margin:5%;padding:10px;font-size:3em;" data-warnwhen="0"><code class="countdown-time"><span class="countdown-digits minutes">05</span><span class="countdown-digits colon">:</span><span class="countdown-digits seconds">00</span></code></div>
<div class="countdown" id="timer_611c3f29" style="right:25%;bottom:15%;margin:5%;font-size:5em;" data-warnwhen="0"><code class="countdown-time"><span class="countdown-digits minutes">10</span><span class="countdown-digits colon">:</span><span class="countdown-digits seconds">00</span></code></div>
# vetor de númerosX <- c(1, 2.3, 4, 5, 6.78, 6:10)X
## [1] 1.00 2.30 4.00 5.00 6.78 6.00 7.00 8.00 9.00 10.00
# Classclass(X)
## [1] "numeric"
# Tamanho length(X)
## [1] 10
Principal característica: Retangular e Números.
# Coerce to a matrixas.matrix(X)
## [,1]## [1,] 1.00## [2,] 2.30## [3,] 4.00## [4,] 5.00## [5,] 6.78## [6,] 6.00## [7,] 7.00## [8,] 8.00## [9,] 9.00## [10,] 10.00
# Cria uma Matrix do zeromatrix(1:10, nrow=5, ncol=2)
## [,1] [,2]## [1,] 1 6## [2,] 2 7## [3,] 3 8## [4,] 4 9## [5,] 5 10
Principal Característica: Tudo cabe dentro de uma lista e Iterável.
# coerce to a listas.list(X)
## [[1]]## [1] 1## ## [[2]]## [1] 2.3## ## [[3]]## [1] 4## ## [[4]]## [1] 5## ## [[5]]## [1] 6.78## ## [[6]]## [1] 6## ## [[7]]## [1] 7## ## [[8]]## [1] 8## ## [[9]]## [1] 9## ## [[10]]## [1] 10
# orlista_1 <- list(X, as.matrix(X), as.character(X))# Visualize a lista.str(list)
## function (...)
Banco de dados.
Dados retangular.
Comporta colunas de classes diferentes.
É um planilha de excel no seu ambiente R.
Class básica do R, diferente de outras linguagens.
# Coercingas.data.frame(X)
## X## 1 1.00## 2 2.30## 3 4.00## 4 5.00## 5 6.78## 6 6.00## 7 7.00## 8 8.00## 9 9.00## 10 10.00
# Criando Manualmentedata <- data.frame(name=c("Tiago", "Tiago"), last_name=c("Ventura", "Ventura") , school=c("UMD", "FGV"), age=c(30,32))data
## name last_name school age## 1 Tiago Ventura UMD 30## 2 Tiago Ventura FGV 32
#devtools::install_github("apreshill/bakeoff")library(bakeoff) # Chamando o pacote# O que tenho no meu ambiente?ls()
## [1] "char_1_5" "data" "lista_1" ## [4] "meu_numero_da_sorte" "nome" "num_1_5" ## [7] "x" "X"
# ativa o banco de dadosdata("bakers")ls()
## [1] "bakers" "char_1_5" "data" ## [4] "lista_1" "meu_numero_da_sorte" "nome" ## [7] "num_1_5" "x" "X"
# Examine o objeto.class(bakers)
## [1] "tbl_df" "tbl" "data.frame"
str(bakers)
## tibble[,8] [120 × 8] (S3: tbl_df/tbl/data.frame)## $ series : Factor w/ 10 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...## $ baker_full : chr [1:120] "Annetha Mills" "David Chambers" "Edward \"Edd\" Kimber" "Jasminder Randhawa" ...## $ baker : chr [1:120] "Annetha" "David" "Edd" "Jasminder" ...## $ age : num [1:120] 30 31 24 45 25 51 44 48 37 31 ...## $ occupation : chr [1:120] "Midwife" "Entrepreneur" "Debt collector for Yorkshire Bank" "Assistant Credit Control Manager" ...## $ hometown : chr [1:120] "Essex" "Milton Keynes" "Bradford" "Birmingham" ...## $ baker_last : chr [1:120] "Mills" "Chambers" "Kimber" "Randhawa" ...## $ baker_first: chr [1:120] "Annetha" "David" "Edward" "Jasminder" ...
Pela Ordem da Coluna
bakers[,1] # primeira coluna
## # A tibble: 120 x 1## series## <fct> ## 1 1 ## 2 1 ## 3 1 ## 4 1 ## 5 1 ## 6 1 ## 7 1 ## 8 1 ## 9 1 ## 10 1 ## # … with 110 more rows
Pela Nome da Coluna
bakers$age
## [1] 30 31 24 45 25 51 44 48 37 31 31 31 40 63 19 41 31 45 25 31 40 43 63 27 45## [26] 21 22 27 36 43 38 28 26 50 25 31 66 51 31 37 51 30 38 37 54 20 30 35 31 69## [51] 39 31 32 41 42 17 60 66 38 37 53 19 41 66 37 30 49 49 35 29 32 25 23 31 61## [76] 37 67 46 20 28 30 26 66 50 71 46 21 29 19 52 33 42 34 29 46 30 33 36 33 47## [101] 60 27 30 26 30 29 56 28 24 32 36 40 20 20 26 35 56 34 28 28
# Oubakers[,"age"]
## # A tibble: 120 x 1## age## <dbl>## 1 30## 2 31## 3 24## 4 45## 5 25## 6 51## 7 44## 8 48## 9 37## 10 31## # … with 110 more rows
Pela posição da linha
bakers[1:5, ]
## # A tibble: 5 x 8## series baker_full baker age occupation hometown baker_last baker_first## <fct> <chr> <chr> <dbl> <chr> <chr> <chr> <chr> ## 1 1 "Annetha Mi… Annet… 30 Midwife Essex Mills Annetha ## 2 1 "David Cham… David 31 Entrepreneur Milton … Chambers David ## 3 1 "Edward \"E… Edd 24 Debt collect… Bradford Kimber Edward ## 4 1 "Jasminder … Jasmi… 45 Assistant Cr… Birming… Randhawa Jasminder ## 5 1 "Jonathan S… Jonat… 25 Research Ana… St Alba… Shepherd Jonathan
Por linha e coluna
bakers[1:5, "age"]
## # A tibble: 5 x 1## age## <dbl>## 1 30## 2 31## 3 24## 4 45## 5 25
bakers[5:15, 3:5]
## # A tibble: 11 x 3## baker age occupation ## <chr> <dbl> <chr> ## 1 Jonathan 25 Research Analyst ## 2 Lea 51 Retired ## 3 Louise 44 Police Officer ## 4 Mark 48 Bus Driver ## 5 Miranda 37 Food buyer for Marks & Spencer ## 6 Ruth 31 Retail manager/Housewife ## 7 Ben 31 Graphic Designer ## 8 Holly 31 Advertising executive ## 9 Ian 40 Fundraiser for English Heritage## 10 Janet 63 Teacher of Modern Languages ## 11 Jason 19 Civil Engineering Student
A classe data.frame possuí algumas funções pré-construídas bastante úteis. Alguns exemplos:
head(bakers) # Mostra primeiras cinco linhastail(bakers) # últimas cinco linhassummary(bakers) # clase de cada colunadim(bakes) # dimensões de linha e colunaglimpse(bakers) # outro modo de ver seus dados.
# Bakers com mais de 60 anosbakers[bakers$age>60,]
## # A tibble: 10 x 8## series baker_full baker age occupation hometown baker_last baker_first## <fct> <chr> <chr> <dbl> <chr> <chr> <chr> <chr> ## 1 2 "Janet Basu" Janet 63 Teacher of… Formby, … Basu Janet ## 2 3 "Brendan Ly… Brend… 63 Recruitmen… Sutton C… Lynch Brendan ## 3 4 "Christine … Chris… 66 Director o… Didcot, … Wallace Christine ## 4 5 "Diana Bear… Diana 69 Women's In… Alkingto… Beard Diana ## 5 5 "Norman Cal… Norman 66 Retired Na… Portknoc… Calder Norman ## 6 6 "Marie Camp… Marie 66 Retired Auchtera… Campbell Marie ## 7 7 "Jane Beedl… Jane 61 Garden des… Beckenham Beedle Jane ## 8 7 "Lee Banfie… Lee 67 Pastor Bolton Banfield Lee ## 9 7 "Valerie \"… Val 66 Semi-retir… Yeovil Stones Valerie ## 10 8 "Flo Atkins" Flo 71 Retired Merseysi… Atkins Flo
#Bakers de Londersbakers[bakers$hometown=="London",]
## # A tibble: 8 x 8## series baker_full baker age occupation hometown baker_last baker_first## <fct> <chr> <chr> <dbl> <chr> <chr> <chr> <chr> ## 1 2 Robert Bill… Robert 25 Photographer London Billington Robert ## 2 4 Kimberley W… Kimbe… 30 Psychologist London Wilson Kimberley ## 3 6 Mat Riley Mat 37 Fire fighter London Riley Mat ## 4 7 Selasi Gbor… Selasi 30 Client servi… London Gbormittah Selasi ## 5 9 Antony Amou… Antony 30 Banker London Amourdoux Antony ## 6 9 Dan Beasley… Dan 36 Full-time pa… London Beasley-H… Dan ## 7 9 Manon Lagrè… Manon 26 Software pro… London Lagrève Manon ## 8 9 Ruby Bhogal Ruby 29 Project mana… London Bhogal Ruby
Uma função importante do R consiste em exportar seus resultados, incluindo um novo banco de dados. Há diversas funções para fazer isso, a depender do formato do output que você deseja. Alguns exemplos:
write.table()
for txtwrite.csv()
for csvwrite.xlsx
for xlsxsave()
to export as a RData# make a fake data setdfake <- data.frame(normal=rnorm(100, 0, 1), uniform=runif(100, 0, 1), pois=rpois(100, 10))# write.function(data, name_to_be_saved)write.csv(dfake, "dfake.csv")
O R
não sabe intuitivamente onde estão seus dados. Se os dados estiverem em uma pasta especial chamada "pesquisa super secreta", temos que dizer ao R
como chegar lá.
Podemos fazer isso de duas maneiras:
O R
não sabe intuitivamente onde estão seus dados. Se os dados estiverem em uma pasta especial chamada "pesquisa super secreta", temos que dizer ao R
como chegar lá.
Podemos fazer isso de duas maneiras:
O R
não sabe intuitivamente onde estão seus dados. Se os dados estiverem em uma pasta especial chamada "pesquisa super secreta", temos que dizer ao R
como chegar lá.
Podemos fazer isso de duas maneiras:
Aprenda onde seus arquivos estão.
Defina seu diretório de trabalho para essa pasta: todos seus outputs e inputs estarão lá.
O R
não sabe intuitivamente onde estão seus dados. Se os dados estiverem em uma pasta especial chamada "pesquisa super secreta", temos que dizer ao R
como chegar lá.
Podemos fazer isso de duas maneiras:
Aprenda onde seus arquivos estão.
Defina seu diretório de trabalho para essa pasta: todos seus outputs e inputs estarão lá.
Toda vez que o R
é inicializado, ele olha para o mesmo lugar (chamado de global path), a menos que seja solicitado a ir para outro lugar.
# Onde meu R está olhando?getwd()
## [1] "/home/venturat/Dropbox/fgv_capes_print/website/fgv_intro_css_/static/slides"
# Onde eu quero que olhe?setwd("/home/venturat/Downloads")
# Checa diretoriogetwd()
## [1] "/home/venturat/Dropbox/fgv_capes_print/website/fgv_intro_css_/static/slides"
# Ve arquivos neste diretorio.list.files()
## [1] "aulas-estatistica.png" "cao.png" ## [3] "code" "deputados_alerj.csv" ## [5] "dfake.csv" "figs" ## [7] "fontsrladies.css" "libs" ## [9] "mun_1985.csv" "rdd.png" ## [11] "slides_apis_cache" "slides_apis_files" ## [13] "slides_apis.html" "slides_apis.Rmd" ## [15] "slides_aula_textos_tutorial_cache" "slides_aula_textos_tutorial.html" ## [17] "slides_aula_textos_tutorial.Rmd" "slides_experimentos_cache" ## [19] "slides_experimentos_files" "slides_experimentos_ufmg.html" ## [21] "slides_experimentos_ufmg.pdf" "slides_experimentos_ufmg.Rmd" ## [23] "slides_experimentos.html" "slides_experimentos.Rmd" ## [25] "slides-01-cont.html" "slides-01-cont.Rmd" ## [27] "slides-01-intro_files" "slides-01-intro.html" ## [29] "slides-01-intro.Rmd" "slides-02-intro_files" ## [31] "slides-02-intro_II_files" "slides-02-intro_II.html" ## [33] "slides-02-intro_II.Rmd" "slides-02-intro.html" ## [35] "slides-02-intro.Rmd" "slides-03-r_markdown.html" ## [37] "slides-03-r_markdown.Rmd" "slides-04-intro-tidyverse_cache" ## [39] "slides-04-intro-tidyverse_files" "slides-04-intro-tidyverse.html" ## [41] "slides-04-intro-tidyverse.Rmd" "slides-05-joins_cache" ## [43] "slides-05-joins.html" "slides-05-joins.Rmd" ## [45] "slides-06-tidy_cache" "slides-06-tidy.html" ## [47] "slides-06-tidy.Rmd" "slides-raspagem_cache" ## [49] "slides-raspagem.html" "slides-raspagem.Rmd" ## [51] "slides-speed_dating.html" "slides-speed_dating.Rmd" ## [53] "slides-tidyverse-extra_cache" "slides-tidyverse-extra.html" ## [55] "slides-tidyverse-extra.Rmd" "slides-visualizacao_I_cache" ## [57] "slides-visualizacao_I_files" "slides-visualizacao_I.html" ## [59] "slides-visualizacao_I.Rmd" "slides-visualizacao_II_cache" ## [61] "slides-visualizacao_II_files" "slides-visualizacao_II.html" ## [63] "slides-visualizacao_II.Rmd" "styles.css" ## [65] "xaringan-themer_modify.css" "xaringan-themer.css"
# Importa os dados. dados <- read.csv("dfake.csv")head(dados)
## X normal uniform pois## 1 1 1.1088054 0.1173935 9## 2 2 0.2844622 0.8508718 13## 3 3 -0.1293795 0.5034212 9## 4 4 -0.1754044 0.8740060 14## 5 5 -0.8794987 0.1786838 6## 6 6 -0.1884141 0.1868031 11
Acima, quando filtramos o banco de dados bakers, usamos a seguinte função:
bakers[bakers$age>60,]
Me explique com o máximo de detalhes o que a linha de código acima está fazendo. Porque a operação booleana está antes da virgula? Qual o output da operação booleana?
<div class="countdown" id="timer_611c3ffa" style="right:0;bottom:0;margin:5%;padding:10px;font-size:3em;" data-warnwhen="0"><code class="countdown-time"><span class="countdown-digits minutes">05</span><span class="countdown-digits colon">:</span><span class="countdown-digits seconds">00</span></code></div>
Funções.
Iteração via Loops.
Controle de Fluxo.
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |