diff --git a/.Rhistory b/.Rhistory index 6ebe5f8..253ea01 100644 --- a/.Rhistory +++ b/.Rhistory @@ -25,3 +25,54 @@ devtools::install_github("atmoschem/veinreport") devtools::install_github("atmoschem/veinreport") library(veinreport) library(cptcity) +(df <- data.frame(a = 1:3)) +names(df) +class(df) +mode(df) +(df <- data.frame(a = 1:3)) +names(df) +class(df) +mode(df) +mtcars +?mtcars +?head +head(df) +head(mtcars) +df <- mtcars +head(df) #mostra as sete primeiras linhas do data frame +summary(mtcars) +?summary +head(df) +summary(df) +?factor +a <- seq.POSIXt(from = hoje, by = 3600, length.out = 24*7) +hoje <- Sys.time() +(a <- seq.POSIXt(from = hoje, by = 3600, length.out = 24)) +weekdays(a) +months(a) +julian(a) #dia Juliano* +a <- seq.POSIXt(from = , by = 3600, length.out = 24*7) +a <- seq.POSIXt(from = hoje , by = 3600, length.out = 24*7) +aa <- weekdays(a) +class(aa) +factor(aa) +factor(aa) +gender_vector <- c("Male", "Female", "Female", "Male", "Male") +factor_gender <- factor(gender_vector) +factor_gender +genero <- c("Masculino", "Masculino", "Feminino", "Masculino", "Feminino", "Feminino") +fator_gen <- factor(genero) +fator_gen +(a <- ISOdate(year = 2018, month = 4, day = 5)) +class(a) +(b <- ISOdate(year = 2018, month = 4, day = 5, tz = "Americas/Sao_Paulo")) +?POSIXlt +?POSIXt +(d <- ISOdatetime(year = 2018, month = 4, day = 5, hour = 0, min = 0, sec = 0, +tz = "Americas/Sao_Paulo")) +hoje <- Sys.time() +(a <- seq.POSIXt(from = hoje, by = 3600, length.out = 24)) +(c <- as.Date(Sys.time)) +(c <- as.Date(Sys.time())) +(c <- as.Date(Sys.time())) +class(c) diff --git a/.Rproj.user/shared/notebooks/paths b/.Rproj.user/shared/notebooks/paths index 5a9230f..e5c8b29 100644 --- a/.Rproj.user/shared/notebooks/paths +++ b/.Rproj.user/shared/notebooks/paths @@ -1 +1,7 @@ -/home/camila/github_repos/cursoR/04-plotting_ggplotting.Rmd="2A96EE5" +/home/isabela/Documentos/01-intro.Rmd="31DC02A2" +/home/isabela/Documentos/02-basicr.Rmd="EABAC0B9" +/home/isabela/Documentos/R/05-Data_frame.R="75AB22F0" +/home/isabela/Documentos/R/07-Lista.r="C0AA7ED7" +/home/isabela/Documentos/cursoR/01-intro.Rmd="4AE20ED3" +/home/isabela/Documentos/cursoR/02-basicr.Rmd="1705D7ED" +/home/isabela/Documentos/cursoR/03-import_export.Rmd="FF4389BF" diff --git a/01-intro.Rmd b/01-intro.Rmd index 75d0884..2a43a1c 100644 --- a/01-intro.Rmd +++ b/01-intro.Rmd @@ -8,11 +8,11 @@ Outros pacotes BASE: [utils](http://stat.ethz.ch/R-manual/R-devel/library/utils/ [grDevices](https://stat.ethz.ch/R-manual/R-devel/library/grDevices/html/00Index.html), [grid](https://stat.ethz.ch/R-manual/R-devel/library/grid/html/00Index.html), [methods](https://stat.ethz.ch/R-manual/R-devel/library/methods/html/00Index.html), [tools](https://stat.ethz.ch/R-manual/R-devel/library/tools/html/00Index.html), [parallel](https://stat.ethz.ch/R-manual/R-devel/library/parallel/html/00Index.html), [compiler](https://stat.ethz.ch/R-manual/R-devel/library/compiler/html/00Index.html), [splines](https://stat.ethz.ch/R-manual/R-devel/library/splines/html/00Index.html), [tcltk](https://stat.ethz.ch/R-manual/R-devel/library/tcltk/html/00Index.html) , [stats4](https://stat.ethz.ch/R-manual/R-devel/library/stats4/html/00Index.html). -Acesse [outros](https://cran.r-project.org/web/packages/available_packages_by_name.html) para a lista de pacotes disponíveis. +Acesse [pacotes](https://cran.r-project.org/web/packages/available_packages_by_name.html) para a lista de pacotes disponíveis. Este curso foi baseado no livro [R Programming for Data Science](https://leanpub.com/rprogramming). -Neste curso iremos utilizar [Rstudio](https://www.rstudio.com/) +Neste curso iremos utilizar [Rstudio](https://www.rstudio.com/), além de poder baixar o programa utilizado nesse curso, você também pode acessar muitos materiais como as [Cheatsheets](https://www.rstudio.com/resources/cheatsheets/) e [Webnários](https://www.rstudio.com/resources/webinars/) que cobrem desde itens básicos como funções essenciais do Rstudio até desenvolvimento de páginas para Web ou apps com Shiny. Explore o máximo que puder! **Dica:** diff --git a/02-basicr.Rmd b/02-basicr.Rmd index b53b219..73055e3 100644 --- a/02-basicr.Rmd +++ b/02-basicr.Rmd @@ -1,128 +1,232 @@ # R! {#r} +A linguagem R pode ser usada desde uma simples calculadora até uma poderosa ferramenta estatística, seja para análise de dados, seja para machine learning, ou seja, com R você pode alcançar tudo o que sempre sonhou. Focaremos em Linux, mas R e RStudio estão disponíveis para Windows e Mac também. -- Iremos focar no Linux, mas R e RStudio estão disponíveis para Windows e Mac também. - Documentação: -- [Intro](http://cran.r-project.org/doc/manuals/r-release/R-intro.html). -- [I/O](http://cran.r-project.org/doc/manuals/r-release/R-data.html). + - [Intro](http://cran.r-project.org/doc/manuals/r-release/R-intro.html). + - [I/O](http://cran.r-project.org/doc/manuals/r-release/R-data.html). - Quer fazer um pacote? [Veja](http://cran.r-project.org/doc/manuals/r-release/R-exts.html), [aqui](http://cran.r-project.org/doc/manuals/r-release/R-ints.html) e [aqui](http://cran.r-project.org/doc/manuals/r-release/R-lang.html). - [Stackoverflow](https://stackoverflow.com/questions/tagged/r) te ajudará em horas de desespero. -## Objetos do R +Nesse capítulo veremos o básico da linguagem, como a idéia é cobrir o máximo de conteúdo possível, passaremos bem rápido pelos objetos e pelas variáveis, com alguns exercícios para melhor entendimento. -- Character `r "a"` -- Numeric `r 1` -- Integer `r 1` -- Complex `r 1i` -- Logical `r TRUE` +## Variáveis Básicas -## Classe +Podemos armazenar valores, strings ou operadores lógicos nas chamadas variáveis básicas, é com elas que podemos fazer operações básicas e transformar o RStudio em uma calculadora superpoderosa. Existem 5 tipos de variáveis básicas, sendo elas: + +- Numeric `r 1`: valores numéricos com ou sem casa decimal +```{r} +5+2.3 +pi +``` +- Character `r "a"`: com eles podemos armazenar strings, como o título de um gráfico +```{r} +titulo <- "Isso é uma string" +titulo +``` +- Integer `r 1`: são valores inteiros + +- Complex `r 1i`: também é possível armazenar valores complexos nas variáveis básicas +```{r} +3 + 4i +``` -`class` essa função permite ver a classe dos objetos +- Logical `r TRUE`: são os famosos operadores Booleanos, que permitem realizar comparações entre variáveis ou dados (**Você não pode criar uma variável com os nome TRUE ou FALSE, esses nomes são reservados pelo R**) +```{r} +1 == 2 +``` ## Vetores +Vetores permitem que você armazene dados em uma sequência 1D de qualquer um dos tipos listados nas variáveis básicas mais o formato "cru" (raw) que o modo de rmazenamento de bytes, por exemplo: - c("A", "C", "D") - 1:5 = c(1, 2, 3, 4, 5) - c(TRUE, FALSE) - c(1i, -1i) -- c(1, "C", "D") qual é a classe??? -- c(1, NA, "D") qual é a classe??? -- c(1, NA, NaN) qual é a classe??? + +**Importante: ao contrário do C ou do Python, na linguagem R, a contagem das posições dos vetores começa do 1 e NÃO do zero!** + +## Classe + +Como foi possível notar, todas as variáveis pertencem a alguma classe, dessa forma, a função `class` permite descobrir qual o tipo de variável que se está utilizando: + +```{r} +x <- c(1,2,3) +class(x) +``` + +```{block2} +**Exercício** Qual a classe dos seguintes vetores? + +* c(1, “C”, “D”) +* c(1, NA, “D”) +* c(1, NA, NaN) +``` ## Converter objetos +Às vezes quando trabalhamos com dados, podemos precisar "arredondar" valores ou converter vetores em listas, para isso existem algumas funções especiais. ### `as` +Um modo de forçar um objeto a assumir outra classe é por meio da função `as`: + ```{r} -as.numeric(c(1, "C", "D")) +as.integer(c(1.5, 2.9, 1)) +``` + +Note que a função apenas converte os números de decimais para inteiros, sem arredondar para o número mais próximo. + +```{block2} +**Pergunta:** o que acontece quando se tenta converter o seguinte vetor? as.numeric(c(1, "C", "D")) ``` ### `merge` e `melt` {#convert_df} -## Matrizes e a função `matrix` +Nem sempre os conjuntos de dados que você encontrar pela vida estarão no formato desejado para plotar e/ou analisar estatísticamente, dessa forma, essas duas funções poderão ajudar na sua jornada: -**[linhas, colunas]** +- Merge: permite a união entre dois Data.frames ([3.10])(#Data.frames), seja por colunas em comum ou linhas em comum +- Melt: do pacote [reshape2](https://cran.r-project.org/web/packages/reshape2/reshape2.pdf), permite que você armazene colunas iguais em uma única, de acordo com o nome especificado -- Só são permitidos elementos **da mesma clase**! +## Array -Argumentos da função `matrix` +Ao contrário do unidimensional vetor, arrays permitm que você armazene dados em diversas dimensões, sendo sempre com o mesmo comprimento. ```{r} -args(matrix) +# Vamos dar uma olhada nos argumentos da função +args(array) ``` -usando TAB +Não esqueça do TAB +Dessa forma, é preciso "informar" ao R qual o número de dimensões que você quer no seu array: ```{r} -(m <- matrix(data = 0, nrow = 4, ncol = 4)) +(a <- array(data = 0, dim = c(1,1))) +class(a) ``` +No caso acima como só foram desiginadas duas dimensões, o array é igual a uma matriz. ```{r} -(m1 <- matrix(data = 1:(4*4), nrow = 4, ncol = 4)) -dim(m1) +(a <- array(data = 0, dim = c(3,3,1))) +class(a) ``` +Como dá pra ver acima, é possível armazenar diversos elementos num array, como por exemplo as dimensões que utilizamos no dia-a-dia de modelos numéricos: espaço (x,y,z) e tempo (z). Dessa forma, podemos criar arrays a partir de vetores e armazená-los em diverssas dimensões. ```{r} -(m2 <- matrix(data = 1:(4*4), nrow = 4, ncol = 4, byrow = TRUE)) -``` +vetor1 <- c(1,2,3,4,5) +vetor2 <- c(10,12,14,16,18,20,22,24) -## Array +(a <- array(data = c(vetor1,vetor2), dim = c(3,3,2))) +class(a) +``` -Permite armazenar diversos elementos, com diversas dimensões. Dessa forma, um array com duas dimensões é o mesmo que uma matriz, dessa forma, podemos armazenar diversas matrizes dentro de um array, mas suas dimensões são pré-estabelecidas. +Se você quiser, também é possível nomear as colunas e linhas do seu array: ```{r} -args(array) +colunas <- c("col1", "col2", "col3") +linhas <- c("lin1", "lin2", "lin3") + +array(data = c(vetor1,vetor2),dim = c(3,3,2),dimnames = list(linhas,colunas)) ``` -Não esqueça do TAB +Além disso, sempre que precisar acessar elementos do seu array é só especificar aas dimensões como para mostrar o elemento de um vetor. ```{r} -(a <- array(data = 0, dim = c(1,1))) -class(a) +a[1,2,2] #(linha, coluna, matriz) ``` -```{r} -(a <- array(data = 0, dim = c(1,1,1))) -class(a) +```{block2} +**Exercício:** Crie um array com 3 dimensões, contendo três linhas e 4 quatro colunas, acesse o elemento da segunda linha e terceira coluna desse array. Não esqueça de verificar a classe desse objeto! ``` +## Matrizes e a função `matrix` + +Uma matriz é um array com duas dimensões, sendo necessário informar o número de colunas e linhas, mas não o de dimensões. + +**[linhas, colunas]** + +Assim como nos array, só são permitidos elementos **da mesma clase**! + +Argumentos da função `matrix` ```{r} -(a <- array(data = 0, dim = c(2,2,2))) +args(matrix) ``` +Colocando dados numa matriz: ```{r} -(a <- array(data = 0, dim = c(2,4,4))) -dim(a) +(m1 <- matrix(data = 1:(4*4), nrow = 4, ncol = 4)) +dim(m1) ``` +Por padrão, a opção "byrow" é igual a **FALSE**, quando passamos para **TRUE**, é possível organizar os dados por linha. + +```{r} +(m2 <- matrix(data = 1:(4*4), nrow = 4, ncol = 4, byrow = TRUE)) +``` -```{r eval = FALSE} -(a <- array(data = 0, dim = c(2, 2,2,2))) +```{block2} +**Exercício:** Construa uma matriz com três linhas que contenha os números de 1 a 9. ``` -## `list` -Já as listas permitem que você armazene qualquer tipo de ojeto, independente da classe, dessa forma, podemos colocar numa lista: número, caracteres, argumentos lógicos, ou que você quiser: +## Listas + +Já as listas permitem que você armazene qualquer tipo de variável básica, independente da classe, dessa forma, podemos colocar numa lista: número, caracteres, argumentos lógicos, ou que você quiser: ```{r} list(list(list(list(1)))) ``` -Isso faz com que elas sejam bastante versáteis e sirvam para armazenar o que você precisar, mas elas só podem ter uma dimensão, como uma fila. + +Isso faz com que elas sejam bastante versáteis e sirvam para armazenar o que você precisar, mas elas só podem ter uma dimensão, como uma fia. Já os objetos armazenados dentro da lista não precisam ter a mesma dimensão. ```{r} (x <- list(1, "a", TRUE, 1 + 4i)) ``` +```{block2} +**Exercício:**Crie uma lista contendo um vetor, uma matriz e um data frame e acesse o segundo elemento dela. +``` + +```{r} +#Para facilitar, já vamos te dar o data frame: + +my_df <- mtcars[1:10,] +``` + +## Data.frames + +Os data frames são uma forma de armazenar seus dados em um formato parecido com uma planilha de excel. Você pode pensar num data frame como uma matriz que armazena em cala coluna um dado diferente, ou como uma lista onde todos os elementos tem o mesmo comprimento. + +```{r} +(df <- data.frame(a = 1:3)) +names(df) +class(df) +mode(df) +``` + +É normalmente num data frame que você importará os seus dados e vale saber como visualizar algumas informações básicas sobre ele direto no seu console, para isso, vamos pegar como exemplo o conjunto `mtcars` da base de dados do R: + +```{r} +df <- mtcars +head(df) #mostra as sete primeiras linhas do data frame +``` + +Para ver as últimas linahs do data frame basta usar a função `tail()`, já uma função muito útil é a `summary()` que apresenta um "resumo" dos seus dados, como média, mediana, mínimos e máximos para cada **coluna** do data frame. + +```{r} +summary(df) +``` + +Iremos trabalhar bastante com data frames daqui pra frente, eles se tornarão aliados muito poderosos. + ## Tempo e Data -R também tem classes de tempo e data: +O R trabalha com três classe de tempo: `POSIXct`, `POSIXlt` e `Date`, sendo que `POSIXct` se refere ao número de segundos desde o início de 1970 no modo UTC, enquanto que `POSIXct` armazena as datas como uma lista, contendo segundos, minutos, horas, dias, meses, etc. ```{r} (a <- ISOdate(year = 2018, month = 4, day = 5)) @@ -130,16 +234,16 @@ class(a) (b <- ISOdate(year = 2018, month = 4, day = 5, tz = "Americas/Sao_Paulo")) ``` -Tempo +Já a classe `Date`, armazena as datas como o número de dias contados a partir de 1970. ```{r} -(d <- ISOdatetime(year = 2018, month = 4, day = 5, hour = 0, min = 0, sec = 0, - tz = "Americas/Sao_Paulo")) +(c <- as.Date(Sys.time())) +class(c) ``` Caso você precise, o pacote [nanotime](https://github.com/eddelbuettel/nanotime) permite trabalhar com nano segundos. -É possível fazer sequências: +Também é possível fazer sequências: ```{r} hoje <- Sys.time() @@ -147,34 +251,30 @@ hoje <- Sys.time() ``` -funções úteis: **weekdays**, **month**, **julian** +Funções úteis: **weekdays**, **month**, **julian** ```{r} weekdays(a) months(a) julian(a) #dia Juliano* ``` -*Para mais informações: https://en.wikipedia.org/wiki/Julian_day: - +*Para mais informações: https://en.wikipedia.org/wiki/Julian_day: ## Fatores -Os `factors` podem ser um pouco infernais. Dê uma olhada em [R INFERNO](http://www.burns-stat.com/documents/books/the-r-inferno/) - -São variáveis que representam categorias, como por exemplo, dias da semana. +Os `factors` podem ser um pouco infernais. Dê uma olhada em [R INFERNO](http://www.burns-stat.com/documents/books/the-r-inferno/). Usados em análise estatísica, fatores são usados para armazenar variáveis categóricas, ou seja, é uma variável que pode pertencer a um número limitado de categorias, como por exemplo, dias da semana. Já uma variável contínua pode assumir um um número infinito de valores. ```{r} -a <- seq.POSIXt(from = hoje, by = 3600, length.out = 24*7) +a <- seq.POSIXt(from = hoje , by = 3600, length.out = 24*7) aa <- weekdays(a) class(aa) +``` +```{r} factor(aa) ``` -São muito úteis para regressões, plotes e resumos estatísitcos. -Olhe os **Levels** - -Então: +São muito úteis para regressões, plotes e resumos estatísitcos, uma vez que limita o número de possibilidades para a qual o dado pertença. Além disso, é possível estabelecer "níveis" que vão designar a categoria do seu dado. ```{r} ab <- factor(x = aa, @@ -183,25 +283,10 @@ ab <- factor(x = aa, levels(ab) ``` -## Data.frames - -_lembre ?data.frame_ - -Lembram uma planilha EXCEL... Mais ou menos +```{block2} +**Exercício:** Converta o vetor abaixo em um fator e mostre os seus níveis -É uma classe bem especial, tem elementos de matriz mas o modo é lista - -```{r} -(df <- data.frame(a = 1:3)) -names(df) -class(df) -mode(df) +- genero <- c("Masculino", "Masculino", "Feminino", "Masculino", "Feminino", "Feminino") ``` -Podemos utilizar para armazenar dados, sendo que um data.frame é sempre composto por vetores com comprimento IGUAL - -```{r} -nrow(df) -ncol(df) -dim(df) -``` +Se tudo pareceu muito corrido, não se preocupe, todos esses conceitos serão praticados mais adiante! diff --git a/docs/intro.html b/docs/intro.html index 6ce5c38..3ff69b9 100644 --- a/docs/intro.html +++ b/docs/intro.html @@ -22,10 +22,10 @@ - + - + @@ -49,43 +49,6 @@ - @@ -103,25 +66,28 @@
raster, sf e starsraster, sf e starsEste curso é para pos, então vamos ver conteúdo rapidamente e se não da tempo, este curso esta online no sitio https://github.com/atmoschem/cursorIAG.
-Eu tento usar BASE sempre que posso, e se não da ai vou para outros paradigmas.
-Outros pacotes de BASE: utils, stats, datasets, graphics, grDevices, grid, methods, tools, parallel, compiler, splines, tcltk , stats4.
-Veja outros pacotes.
-Este curso esta baseado no livro R Programming for Data Science.
-Vamos usar Rstudio
+Este curso é voltado para os alunos de pós-graduação, dessa forma, veremos os conceitos rapidamente. Caso não haja tempo, o conteúdo ficará online no link: https://github.com/atmoschem/cursorIAG.
+Sempre que tiver uma dúvida, tente utilizar: BASE.
+Outros pacotes BASE: utils, stats, datasets, graphics, grDevices, grid, methods, tools, parallel, compiler, splines, tcltk , stats4.
+Acesse pacotes para a lista de pacotes disponíveis.
+Este curso foi baseado no livro R Programming for Data Science.
+Neste curso iremos utilizar Rstudio, além de poder baixar o programa utilizado nesse curso, você também pode acessar muitos materiais como as Cheatsheets e Webnários que cobrem desde itens básicos como funções essenciais do Rstudio até desenvolvimento de páginas para Web ou apps com Shiny. Explore o máximo que puder!
Dica:
?função.?função.teu novo melhor amigo, besti friendi, BFF, parceiro, mano, tabarish, komrade, compaheiro, colega, buisiness partner amd whatever meanningful is
Esta combinação é tão boa, como o cafe com leite, pizza e abacaxi, vitamina de acabate com amendoim Manaus, a melhor combinação.
-
Porque quando se tu não lembra os argumentos da função, e não quer ver o help ? de cada função, so clica TAB e RSTUDIO te mostrara a lista de argumentos.
-Vamos lá!
+Isso te ajudará a evitar coisas como: grafia errada da função, verificar se a função existe, verificar argumentos, etc… Use sempre!
+
Vamos começar!
asmatrixlistdata.framesmatrixraster, sf e starsraster, sf e starsA linguagem R pode ser usada desde uma simples calculadora até uma poderosa ferramenta estatística, seja para análise de dados, seja para machine learning, ou seja, com R você pode alcançar tudo o que sempre sonhou. Focaremos em Linux, mas R e RStudio estão disponíveis para Windows e Mac também.
+Nesse capítulo veremos o básico da linguagem, como a idéia é cobrir o máximo de conteúdo possível, passaremos bem rápido pelos objetos e pelas variáveis, com alguns exercícios para melhor entendimento.
+Podemos armazenar valores, strings ou operadores lógicos nas chamadas variáveis básicas, é com elas que podemos fazer operações básicas e transformar o RStudio em uma calculadora superpoderosa. Existem 5 tipos de variáveis básicas, sendo elas:
class função permite ver a classe dos objetos
5+2.3## [1] 7.3
+pi## [1] 3.141593
+titulo <- "Isso é uma string"
+titulo## [1] "Isso é uma string"
+Integer 1: são valores inteiros
Complex 0+1i: também é possível armazenar valores complexos nas variáveis básicas
3 + 4i## [1] 3+4i
+1 == 2## [1] FALSE
Vetores permitem que você armazene dados em uma sequência 1D de qualquer um dos tipos listados nas variáveis básicas mais o formato “cru” (raw) que o modo de rmazenamento de bytes, por exemplo:
Importante: ao contrário do C ou do Python, na linguagem R, a contagem das posições dos vetores começa do 1 e NÃO do zero!
+Como foi possível notar, todas as variáveis pertencem a alguma classe, dessa forma, a função class permite descobrir qual o tipo de variável que se está utilizando:
x <- c(1,2,3)
+class(x)## [1] "numeric"
+Exercício Qual a classe dos seguintes vetores?
+asas.numeric(c(1, "C", "D"))## Warning: NAs introduzidos por coerção
-## [1] 1 NA NA
+Às vezes quando trabalhamos com dados, podemos precisar “arredondar” valores ou converter vetores em listas, para isso existem algumas funções especiais.
+asUm modo de forçar um objeto a assumir outra classe é por meio da função as:
as.integer(c(1.5, 2.9, 1))## [1] 1 2 1
+Note que a função apenas converte os números de decimais para inteiros, sem arredondar para o número mais próximo.
+Pergunta: o que acontece quando se tenta converter o seguinte vetor? as.numeric(c(1, “C”, “D”))
matrix[linhas, colunas]
+merge e meltNem sempre os conjuntos de dados que você encontrar pela vida estarão no formato desejado para plotar e/ou analisar estatísticamente, dessa forma, essas duas funções poderão ajudar na sua jornada:
vamos ver os argumentos da função matrix
args(matrix)## function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
-## NULL
-usando TAB
-(m <- matrix(data = 0, nrow = 4, ncol = 4))## [,1] [,2] [,3] [,4]
-## [1,] 0 0 0 0
-## [2,] 0 0 0 0
-## [3,] 0 0 0 0
-## [4,] 0 0 0 0
-(m1 <- matrix(data = 1:(4*4), nrow = 4, ncol = 4))## [,1] [,2] [,3] [,4]
-## [1,] 1 5 9 13
-## [2,] 2 6 10 14
-## [3,] 3 7 11 15
-## [4,] 4 8 12 16
-dim(m1)## [1] 4 4
-(m2 <- matrix(data = 1:(4*4), nrow = 4, ncol = 4, byrow = TRUE))## [,1] [,2] [,3] [,4]
-## [1,] 1 2 3 4
-## [2,] 5 6 7 8
-## [3,] 9 10 11 12
-## [4,] 13 14 15 16
+É como uma matriz de matrizes de matrizes de matrizes…… and so on.
-args(array)Ao contrário do unidimensional vetor, arrays permitm que você armazene dados em diversas dimensões, sendo sempre com o mesmo comprimento.
+# Vamos dar uma olhada nos argumentos da função
+args(array)## function (data = NA, dim = length(data), dimnames = NULL)
## NULL
-lembre usar TAB
+Não esqueça do TAB Dessa forma, é preciso “informar” ao R qual o número de dimensões que você quer no seu array:
(a <- array(data = 0, dim = c(1,1)))## [,1]
## [1,] 0
class(a)## [1] "matrix"
-(a <- array(data = 0, dim = c(1,1,1)))No caso acima como só foram desiginadas duas dimensões, o array é igual a uma matriz.
+(a <- array(data = 0, dim = c(3,3,1)))## , , 1
##
-## [,1]
-## [1,] 0
+## [,1] [,2] [,3]
+## [1,] 0 0 0
+## [2,] 0 0 0
+## [3,] 0 0 0
class(a)## [1] "array"
-(a <- array(data = 0, dim = c(2,2,2)))Como dá pra ver acima, é possível armazenar diversos elementos num array, como por exemplo as dimensões que utilizamos no dia-a-dia de modelos numéricos: espaço (x,y,z) e tempo (z). Dessa forma, podemos criar arrays a partir de vetores e armazená-los em diverssas dimensões.
+vetor1 <- c(1,2,3,4,5)
+vetor2 <- c(10,12,14,16,18,20,22,24)
+
+(a <- array(data = c(vetor1,vetor2), dim = c(3,3,2)))## , , 1
##
-## [,1] [,2]
-## [1,] 0 0
-## [2,] 0 0
+## [,1] [,2] [,3]
+## [1,] 1 4 12
+## [2,] 2 5 14
+## [3,] 3 10 16
##
## , , 2
##
-## [,1] [,2]
-## [1,] 0 0
-## [2,] 0 0
-(a <- array(data = 0, dim = c(2,4,4)))class(a)## [1] "array"
+Se você quiser, também é possível nomear as colunas e linhas do seu array:
+colunas <- c("col1", "col2", "col3")
+linhas <- c("lin1", "lin2", "lin3")
+
+array(data = c(vetor1,vetor2),dim = c(3,3,2),dimnames = list(linhas,colunas))## , , 1
##
-## [,1] [,2] [,3] [,4]
-## [1,] 0 0 0 0
-## [2,] 0 0 0 0
+## col1 col2 col3
+## lin1 1 4 12
+## lin2 2 5 14
+## lin3 3 10 16
##
## , , 2
##
-## [,1] [,2] [,3] [,4]
-## [1,] 0 0 0 0
-## [2,] 0 0 0 0
-##
-## , , 3
-##
-## [,1] [,2] [,3] [,4]
-## [1,] 0 0 0 0
-## [2,] 0 0 0 0
-##
-## , , 4
-##
-## [,1] [,2] [,3] [,4]
-## [1,] 0 0 0 0
-## [2,] 0 0 0 0
-dim(a)## [1] 2 4 4
-(a <- array(data = 0, dim = c(2, 2,2,2)))Além disso, sempre que precisar acessar elementos do seu array é só especificar aas dimensões como para mostrar o elemento de um vetor.
+a[1,2,2] #(linha, coluna, matriz)## [1] 24
+Exercício: Crie um array com 3 dimensões, contendo três linhas e 4 quatro colunas, acesse o elemento da segunda linha e terceira coluna desse array. Não esqueça de verificar a classe desse objeto!
listAs listas são como sacolas, e dentro delas, tu pode colocar mais sacolas… então, tu pode ter sacolas, dentro de sacolas, dentro de sacolas… ou
+matrixUma matriz é um array com duas dimensões, sendo necessário informar o número de colunas e linhas, mas não o de dimensões.
+[linhas, colunas]
+Assim como nos array, só são permitidos elementos da mesma clase!
+Argumentos da função matrix
args(matrix)## function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
+## NULL
+Colocando dados numa matriz:
+(m1 <- matrix(data = 1:(4*4), nrow = 4, ncol = 4))## [,1] [,2] [,3] [,4]
+## [1,] 1 5 9 13
+## [2,] 2 6 10 14
+## [3,] 3 7 11 15
+## [4,] 4 8 12 16
+dim(m1)## [1] 4 4
+Por padrão, a opção “byrow” é igual a FALSE, quando passamos para TRUE, é possível organizar os dados por linha.
+(m2 <- matrix(data = 1:(4*4), nrow = 4, ncol = 4, byrow = TRUE))## [,1] [,2] [,3] [,4]
+## [1,] 1 2 3 4
+## [2,] 5 6 7 8
+## [3,] 9 10 11 12
+## [4,] 13 14 15 16
+Exercício: Construa uma matriz com três linhas que contenha os números de 1 a 9.
+Já as listas permitem que você armazene qualquer tipo de variável básica, independente da classe, dessa forma, podemos colocar numa lista: número, caracteres, argumentos lógicos, ou que você quiser:
list(list(list(list(1))))## [[1]]
## [[1]][[1]]
## [[1]][[1]][[1]]
## [[1]][[1]][[1]][[1]]
## [1] 1
-a diferença das matrices, tu pode colocar cualquer coisa nas listas, por exemplo: funções, characters, etc.
-(x <- list(1, "a", TRUE, 1 + 4i))Isso faz com que elas sejam bastante versáteis e sirvam para armazenar o que você precisar, mas elas só podem ter uma dimensão, como uma fia. Já os objetos armazenados dentro da lista não precisam ter a mesma dimensão.
+(x <- list(1, "a", TRUE, 1 + 4i))## [[1]]
## [1] 1
##
@@ -330,122 +380,152 @@ 3.7 list
##
## [[4]]
## [1] 1+4i
+Exercício:Crie uma lista contendo um vetor, uma matriz e um data frame e acesse o segundo elemento dela.
+#Para facilitar, já vamos te dar o data frame:
+
+my_df <- mtcars[1:10,]Os data frames são uma forma de armazenar seus dados em um formato parecido com uma planilha de excel. Você pode pensar num data frame como uma matriz que armazena em cala coluna um dado diferente, ou como uma lista onde todos os elementos tem o mesmo comprimento.
+(df <- data.frame(a = 1:3))## a
+## 1 1
+## 2 2
+## 3 3
+names(df)## [1] "a"
+class(df)## [1] "data.frame"
+mode(df)## [1] "list"
+É normalmente num data frame que você importará os seus dados e vale saber como visualizar algumas informações básicas sobre ele direto no seu console, para isso, vamos pegar como exemplo o conjunto mtcars da base de dados do R:
df <- mtcars
+head(df) #mostra as sete primeiras linhas do data frame## mpg cyl disp hp drat wt qsec vs am gear carb
+## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
+## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
+## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
+## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
+## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
+## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
+Para ver as últimas linahs do data frame basta usar a função tail(), já uma função muito útil é a summary() que apresenta um “resumo” dos seus dados, como média, mediana, mínimos e máximos para cada coluna do data frame.
summary(df)## mpg cyl disp hp
+## Min. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0
+## 1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8 1st Qu.: 96.5
+## Median :19.20 Median :6.000 Median :196.3 Median :123.0
+## Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7
+## 3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0 3rd Qu.:180.0
+## Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0
+## drat wt qsec vs
+## Min. :2.760 Min. :1.513 Min. :14.50 Min. :0.0000
+## 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89 1st Qu.:0.0000
+## Median :3.695 Median :3.325 Median :17.71 Median :0.0000
+## Mean :3.597 Mean :3.217 Mean :17.85 Mean :0.4375
+## 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90 3rd Qu.:1.0000
+## Max. :4.930 Max. :5.424 Max. :22.90 Max. :1.0000
+## am gear carb
+## Min. :0.0000 Min. :3.000 Min. :1.000
+## 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000
+## Median :0.0000 Median :4.000 Median :2.000
+## Mean :0.4062 Mean :3.688 Mean :2.812
+## 3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000
+## Max. :1.0000 Max. :5.000 Max. :8.000
+Iremos trabalhar bastante com data frames daqui pra frente, eles se tornarão aliados muito poderosos.
R tem classes de tempo e data:
+O R trabalha com três classe de tempo: POSIXct, POSIXlt e Date, sendo que POSIXct se refere ao número de segundos desde o início de 1970 no modo UTC, enquanto que POSIXct armazena as datas como uma lista, contendo segundos, minutos, horas, dias, meses, etc.
(a <- ISOdate(year = 2018, month = 4, day = 5))## [1] "2018-04-05 12:00:00 GMT"
class(a)## [1] "POSIXct" "POSIXt"
(b <- ISOdate(year = 2018, month = 4, day = 5, tz = "Americas/Sao_Paulo"))## [1] "2018-04-05 12:00:00 Americas"
-tempo
-(d <- ISOdatetime(year = 2018, month = 4, day = 5, hour = 0, min = 0, sec = 0,
- tz = "Americas/Sao_Paulo"))## [1] "2018-04-05 Americas"
-O pacote nanotime permite trabalhar com nano segundos.
-Da pra fazer secuencias:
+Já a classe Date, armazena as datas como o número de dias contados a partir de 1970.
(c <- as.Date(Sys.time()))## [1] "2018-06-02"
+class(c)## [1] "Date"
+Caso você precise, o pacote nanotime permite trabalhar com nano segundos.
+Também é possível fazer sequências:
hoje <- Sys.time()
(a <- seq.POSIXt(from = hoje, by = 3600, length.out = 24))## [1] "2018-05-17 19:14:35 -03" "2018-05-17 20:14:35 -03"
-## [3] "2018-05-17 21:14:35 -03" "2018-05-17 22:14:35 -03"
-## [5] "2018-05-17 23:14:35 -03" "2018-05-18 00:14:35 -03"
-## [7] "2018-05-18 01:14:35 -03" "2018-05-18 02:14:35 -03"
-## [9] "2018-05-18 03:14:35 -03" "2018-05-18 04:14:35 -03"
-## [11] "2018-05-18 05:14:35 -03" "2018-05-18 06:14:35 -03"
-## [13] "2018-05-18 07:14:35 -03" "2018-05-18 08:14:35 -03"
-## [15] "2018-05-18 09:14:35 -03" "2018-05-18 10:14:35 -03"
-## [17] "2018-05-18 11:14:35 -03" "2018-05-18 12:14:35 -03"
-## [19] "2018-05-18 13:14:35 -03" "2018-05-18 14:14:35 -03"
-## [21] "2018-05-18 15:14:35 -03" "2018-05-18 16:14:35 -03"
-## [23] "2018-05-18 17:14:35 -03" "2018-05-18 18:14:35 -03"
-funções bacana: weekdays, month, julian
+## [1] "2018-06-01 22:49:44 -03" "2018-06-01 23:49:44 -03"
+## [3] "2018-06-02 00:49:44 -03" "2018-06-02 01:49:44 -03"
+## [5] "2018-06-02 02:49:44 -03" "2018-06-02 03:49:44 -03"
+## [7] "2018-06-02 04:49:44 -03" "2018-06-02 05:49:44 -03"
+## [9] "2018-06-02 06:49:44 -03" "2018-06-02 07:49:44 -03"
+## [11] "2018-06-02 08:49:44 -03" "2018-06-02 09:49:44 -03"
+## [13] "2018-06-02 10:49:44 -03" "2018-06-02 11:49:44 -03"
+## [15] "2018-06-02 12:49:44 -03" "2018-06-02 13:49:44 -03"
+## [17] "2018-06-02 14:49:44 -03" "2018-06-02 15:49:44 -03"
+## [19] "2018-06-02 16:49:44 -03" "2018-06-02 17:49:44 -03"
+## [21] "2018-06-02 18:49:44 -03" "2018-06-02 19:49:44 -03"
+## [23] "2018-06-02 20:49:44 -03" "2018-06-02 21:49:44 -03"
+Funções úteis: weekdays, month, julian
weekdays(a)## [1] "Thursday" "Thursday" "Thursday" "Thursday" "Thursday" "Friday"
-## [7] "Friday" "Friday" "Friday" "Friday" "Friday" "Friday"
-## [13] "Friday" "Friday" "Friday" "Friday" "Friday" "Friday"
-## [19] "Friday" "Friday" "Friday" "Friday" "Friday" "Friday"
+## [1] "sexta" "sexta" "sábado" "sábado" "sábado" "sábado" "sábado"
+## [8] "sábado" "sábado" "sábado" "sábado" "sábado" "sábado" "sábado"
+## [15] "sábado" "sábado" "sábado" "sábado" "sábado" "sábado" "sábado"
+## [22] "sábado" "sábado" "sábado"
months(a)## [1] "May" "May" "May" "May" "May" "May" "May" "May" "May" "May" "May"
-## [12] "May" "May" "May" "May" "May" "May" "May" "May" "May" "May" "May"
-## [23] "May" "May"
-julian(a) #olha ?julian... dias desde origin## [1] "junho" "junho" "junho" "junho" "junho" "junho" "junho" "junho"
+## [9] "junho" "junho" "junho" "junho" "junho" "junho" "junho" "junho"
+## [17] "junho" "junho" "junho" "junho" "junho" "junho" "junho" "junho"
+julian(a) #dia Juliano*## Time differences in days
-## [1] 17668.93 17668.97 17669.01 17669.05 17669.09 17669.14 17669.18
-## [8] 17669.22 17669.26 17669.30 17669.34 17669.39 17669.43 17669.47
-## [15] 17669.51 17669.55 17669.59 17669.64 17669.68 17669.72 17669.76
-## [22] 17669.80 17669.84 17669.89
+## [1] 17684.08 17684.12 17684.16 17684.20 17684.24 17684.28 17684.33
+## [8] 17684.37 17684.41 17684.45 17684.49 17684.53 17684.58 17684.62
+## [15] 17684.66 17684.70 17684.74 17684.78 17684.83 17684.87 17684.91
+## [22] 17684.95 17684.99 17685.03
## attr(,"origin")
## [1] "1970-01-01 GMT"
-olha https://en.wikipedia.org/wiki/Julian_day:
+*Para mais informações: https://en.wikipedia.org/wiki/Julian_day:
Os factors podem ser um pouco infernais. Olha R INFERNO
Usados para representar categorias, ejemplo clasico para nos, dias da semana.
-a <- seq.POSIXt(from = hoje, by = 3600, length.out = 24*7)
+3.10 Fatores
+Os factors podem ser um pouco infernais. Dê uma olhada em R INFERNO. Usados em análise estatísica, fatores são usados para armazenar variáveis categóricas, ou seja, é uma variável que pode pertencer a um número limitado de categorias, como por exemplo, dias da semana. Já uma variável contínua pode assumir um um número infinito de valores.
+a <- seq.POSIXt(from = hoje , by = 3600, length.out = 24*7)
aa <- weekdays(a)
class(aa)
## [1] "character"
factor(aa)
-## [1] Thursday Thursday Thursday Thursday Thursday Friday Friday
-## [8] Friday Friday Friday Friday Friday Friday Friday
-## [15] Friday Friday Friday Friday Friday Friday Friday
-## [22] Friday Friday Friday Friday Friday Friday Friday
-## [29] Friday Saturday Saturday Saturday Saturday Saturday Saturday
-## [36] Saturday Saturday Saturday Saturday Saturday Saturday Saturday
-## [43] Saturday Saturday Saturday Saturday Saturday Saturday Saturday
-## [50] Saturday Saturday Saturday Saturday Sunday Sunday Sunday
-## [57] Sunday Sunday Sunday Sunday Sunday Sunday Sunday
-## [64] Sunday Sunday Sunday Sunday Sunday Sunday Sunday
-## [71] Sunday Sunday Sunday Sunday Sunday Sunday Sunday
-## [78] Monday Monday Monday Monday Monday Monday Monday
-## [85] Monday Monday Monday Monday Monday Monday Monday
-## [92] Monday Monday Monday Monday Monday Monday Monday
-## [99] Monday Monday Monday Tuesday Tuesday Tuesday Tuesday
-## [106] Tuesday Tuesday Tuesday Tuesday Tuesday Tuesday Tuesday
-## [113] Tuesday Tuesday Tuesday Tuesday Tuesday Tuesday Tuesday
-## [120] Tuesday Tuesday Tuesday Tuesday Tuesday Tuesday Wednesday
-## [127] Wednesday Wednesday Wednesday Wednesday Wednesday Wednesday Wednesday
-## [134] Wednesday Wednesday Wednesday Wednesday Wednesday Wednesday Wednesday
-## [141] Wednesday Wednesday Wednesday Wednesday Wednesday Wednesday Wednesday
-## [148] Wednesday Wednesday Thursday Thursday Thursday Thursday Thursday
-## [155] Thursday Thursday Thursday Thursday Thursday Thursday Thursday
-## [162] Thursday Thursday Thursday Thursday Thursday Thursday Thursday
-## Levels: Friday Monday Saturday Sunday Thursday Tuesday Wednesday
-olha os Levels
-Então:
+## [1] sexta sexta sábado sábado sábado sábado sábado sábado
+## [9] sábado sábado sábado sábado sábado sábado sábado sábado
+## [17] sábado sábado sábado sábado sábado sábado sábado sábado
+## [25] sábado sábado domingo domingo domingo domingo domingo domingo
+## [33] domingo domingo domingo domingo domingo domingo domingo domingo
+## [41] domingo domingo domingo domingo domingo domingo domingo domingo
+## [49] domingo domingo segunda segunda segunda segunda segunda segunda
+## [57] segunda segunda segunda segunda segunda segunda segunda segunda
+## [65] segunda segunda segunda segunda segunda segunda segunda segunda
+## [73] segunda segunda terça terça terça terça terça terça
+## [81] terça terça terça terça terça terça terça terça
+## [89] terça terça terça terça terça terça terça terça
+## [97] terça terça quarta quarta quarta quarta quarta quarta
+## [105] quarta quarta quarta quarta quarta quarta quarta quarta
+## [113] quarta quarta quarta quarta quarta quarta quarta quarta
+## [121] quarta quarta quinta quinta quinta quinta quinta quinta
+## [129] quinta quinta quinta quinta quinta quinta quinta quinta
+## [137] quinta quinta quinta quinta quinta quinta quinta quinta
+## [145] quinta quinta sexta sexta sexta sexta sexta sexta
+## [153] sexta sexta sexta sexta sexta sexta sexta sexta
+## [161] sexta sexta sexta sexta sexta sexta sexta sexta
+## Levels: domingo quarta quinta sábado segunda sexta terça
+São muito úteis para regressões, plotes e resumos estatísitcos, uma vez que limita o número de possibilidades para a qual o dado pertença. Além disso, é possível estabelecer “níveis” que vão designar a categoria do seu dado.
ab <- factor(x = aa,
levels = c("Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday", "Sunday"))
levels(ab)
## [1] "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"
## [7] "Sunday"
-data.frameslembre ?data.frame
-São como planilha EXCEL…. mais o menos
-É uma classe bem especial, tem elementos de matriz mas o modo é lista
-(df <- data.frame(a = 1:3))## a
-## 1 1
-## 2 2
-## 3 3
-names(df)## [1] "a"
-class(df)## [1] "data.frame"
-mode(df)## [1] "list"
-Então
-nrow(df)## [1] 3
-ncol(df)## [1] 1
-dim(df)## [1] 3 1
+Exercício: Converta o vetor abaixo em um fator e mostre os seus níveis
+Se tudo pareceu muito corrido, não se preocupe, todos esses conceitos serão praticados mais adiante!