-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy path02-basicr.Rmd
293 lines (196 loc) · 9.58 KB
/
02-basicr.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
# 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.
Nesse capítulo veremos o básico da linguagem. Como a ideia é cobrir o máximo de conteúdo possível, passaremos bem rápido pelos conceitos básicos, com alguns exercícios para melhor entendimento.
## Variáveis Básicas
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
```
- *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 nomes 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 armazenamento de bytes. Por exemplo:
- c("A", "C", "D")
- 1:5 = c(1, 2, 3, 4, 5)
- c(TRUE, FALSE)
- c(1i, -1i)
**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 a classe da variável que se está utilizando:
```{r}
x <- c(1,2,3)
class(x)
```
***
<span style="color:red">**Exercício**: Qual a classe dos seguintes vetores?</span>
`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.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.
***
<span style="color:blue">**Pergunta**: O que acontece quando se tenta converter o seguinte vetor?</span>
`as.numeric(c(1, "C", "D"))`
***
### `merge` e `melt` {#convert_df}
Nem sempre os conjuntos de dados que você encontrar pela vida estarão no formato desejado para plotar e/ou analisar estatisticamente, dessa forma, essas duas funções poderão ajudar na sua jornada:
- `merge`: permite a união entre dois [data frames](#dataframes), 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ê agrupe várias colunas em função de outra coluna em comum, de acordo com o nome especificado
## Array
Ao contrário do vetor unidimensional, arrays permitem que você armazene dados em diversas dimensões, sendo todas com o mesmo comprimento.
Vamos dar uma olhada nos argumentos da função:
```{r}
args(array)
```
Dessa forma, é preciso "informar" ao R qual o número de dimensões que você quer no seu array:
```{r}
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}
a <- array(data = 0, dim = c(3,3,1))
class(a)
```
Como dá pra ver acima, é possível armazenar diversos elementos em um 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}
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))
class(a)
```
Se você quiser, também é possível nomear as colunas e linhas do seu array:
```{r}
colunas <- c("col1", "col2", "col3")
linhas <- c("lin1", "lin2", "lin3")
array(data = c(vetor1, vetor2), dim = c(3, 3, 2), dimnames = list(linhas, colunas))
```
Além disso, sempre que precisar acessar elementos do seu array é só especificar as dimensões como para mostrar o elemento de um vetor.
```{r}
a[1,2,2] #(linha, coluna, matriz)
```
***
<span style="color:red">**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!</span>
***
## 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.
Assim como em arrays, só são permitidos elementos **da mesma clase**!
Argumentos da função `matrix`:
```{r}
args(matrix)
```
Colocando dados em uma matriz:
```{r}
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)
```
***
<span style="color:red">**Exercício**: Construa uma matriz com três linhas que contenha os números de 1 a 9.</span>
***
## 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. Já os objetos armazenados dentro da lista não precisam ter a mesma dimensão.
```{r}
x <- list(1, "a", TRUE, 1 + 4i)
```
***
<span style="color:red">**Exercício**: Crie uma lista contendo um vetor, uma matriz e um data frame e acesse o segundo elemento dela.</span>
<span style="color:red">Para facilitar, já vamos te dar o data frame:</span>
```{r}
my_df <- mtcars[1:10,]
```
***
## Data Frames {#dataframes}
Os data frames são uma forma de armazenar seus dados em um formato parecido com uma planilha de excel. Você pode pensar em um data frame como uma matriz que armazena em cada 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 em um 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 linhas 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
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 `POSIXlt` armazena as datas como uma lista, contendo segundos, minutos, horas, dias, meses, etc.
```{r}
a <- ISOdate(year = 2018, month = 4, day = 5)
class(a)
b <- ISOdate(year = 2018, month = 4, day = 5, tz = "Americas/Sao_Paulo")
```
Já a classe `Date`, armazena as datas como o número de dias contados a partir de 1970.
```{r}
c <- as.Date(Sys.time())
class(c)
```
Caso você precise, o pacote [nanotime](https://github.com/eddelbuettel/nanotime) permite trabalhar com nano segundos.
Também é possível fazer sequências:
```{r}
hoje <- Sys.time()
a <- seq.POSIXt(from = hoje, by = 3600, length.out = 24)
```
Funções úteis: `weekdays`, `month` e [`julian`](https://en.wikipedia.org/wiki/Julian_day)
```{r}
weekdays(a)
months(a)
julian(a) #dia Juliano
```
O formato `POSIXct` é o mais comumente usado principalmente se os dados analisados serão plotados.
## Fatores
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)
aa <- weekdays(a)
class(aa)
```
```{r}
factor(aa)
```
São muito úteis para regressões, gráficos 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,
levels = c("Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday", "Sunday"))
levels(ab)
```
***
<span style="color:red">**Exercício**: Converta o vetor abaixo em um fator e mostre os seus níveis</span>
`genero <- c("Masculino", "Masculino", "Feminino", "Masculino", "Feminino", "Feminino")`
***
Se tudo pareceu muito corrido, não se preocupe, todos esses conceitos serão praticados mais adiante!