-
Notifications
You must be signed in to change notification settings - Fork 3
/
chapter3.Rmd
679 lines (499 loc) · 28.7 KB
/
chapter3.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
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
---
title_meta : Capítulo 3
title : Matrizes
description : Neste capítulo você irá aprender como trabalhar com matrizes em R. Até o final deste capítulo, você será capaz de criar matrizes e entender como fazer computação básica com ela. Você irá analisar algumas informações sobre Star Wars para ilustrar o uso de matrizes em R. Que a Força esteja com você!
--- type:NormalExercise xp:100 skills:1 key:d61aeba84c
## O que é uma matriz?
Em R, uma matriz (ou matrix, em inglês) é uma coleção de elementos com o mesmo tipo de dado (numérico, caracter ou lógico)organizado em um número fixo de linhas e colunas. Enquanto você estiver trabalhando apenas com linhas e colunas, sua matriz é chamada de matriz bi-dimensional (two-dimensional).
Você pode construir uma matriz em R com a função [`matrix()`](http://www.rdocumentation.org/packages/base/functions/matrix). Considere o seguinte exemplo:
```
matrix(1:9, byrow = TRUE, nrow = 3)
```
Na função [`matrix()`](http://www.rdocumentation.org/packages/base/functions/matrix):
- O primeiro argumento é uma coleção de elementos que R irá organizar em linhas e colunas na matriz. Aqui, nós usamos `1:9`, o qual é um atalho para `c(1, 2, 3, 4, 5, 6, 7, 8, 9)`.
- O argumento `byrow` indica que a matriz será preenchida pelas linhas. Se nós quisessemos que a matriz fosse preenchida pelas colunas, nós colocaríamos `byrow = FALSE`.
- O terceiro argumento `nrow` indica que a matriz deve ter três colunas.
*** =instructions
Construa uma matriz com 3 linhas contendo os números de 1 a 9, preenchida pela linha.
*** =hint
Leia a tarefa com atenção, a resposta já foi dada!
*** =pre_exercise_code
```{r}
# no pec
```
*** =sample_code
```{r}
# Construa uma matriz com 3 linhas que contenha os números de 1 a 9
```
*** =solution
```{r}
# Construa uma matriz com 3 linhas que contenha os números de 1 a 9
matrix(1:9, byrow = TRUE, nrow = 3)
```
*** =sct
```{r}
test_function("matrix", c("data", "byrow", "nrow"),
incorrect_msg = "Você criou a matriz corretamente? Dá uma olhada na descrição da tarefa. A resposta já foi dada!")
test_output_contains("matrix(1:9, byrow=TRUE, nrow=3)",
incorrect_msg = "Parece haver um problema com a declaração da matriz. Dá uma olhada na descrição da tarefa. A resposta já foi dada!")
success_msg("Ótimo! Continue para o próximo exercício.")
```
--- type:NormalExercise xp:100 skills:1 key:effc2fb945
## Analisar matrizes você deve
É hora de sujar as mãos. Nos exercícios seguintes você irá analisar os números de bilheteria da franquia Star Wars. Que a Força esteja com você!
No editor ao lado, três vetores foram criados. Cada um deles representa a bilheteria levantada pelos três primeiros filmes da franquia. O primeiro elemento de cada vetor indica a bilheteria que o filme fez nos Estados Unidos (em milhões de dólares); o segundo elemento é quanto cada filme faturou fora dos EUA (fonte: Wikipedia).
Neste exercício você irá combinar todas essas peças em um único vetor. Em seguida, você irá criar uma matriz a partir desse vetor.
*** =instructions
- Use `c(new_hope, empire_strikes, return_jedi)` para combinar os três elementos em um único vetor. Chame esse vetor de `box_office`.
- Construa uma matriz de três linhas, onde cada uma representa um filme. Use a função `matrix()` para fazer isso. O primeiro argumento será o vetor `box_office`, contendo todas as bilheterias. Em seguida, você terá que especificar `nrow = 3` e `byrow = TRUE`. Chame essa matriz de `star_wars_matrix`.
*** =hint
- `box_office <- c(new_hope, empire_strikes, return_jedi)` irá combinar todos os valores dos diferentes vetores em um único vetor de 6 elementos.
- Já `matrix(box_office, nrow = ..., by_row ...)` é um modelo para a solução da segunda instrução.
*** =pre_exercise_code
```{r}
# no pec
```
*** =sample_code
```{r}
# Bilheteria de Star Wars (em milhões!)
new_hope <- c(460.998, 314.4)
empire_strikes <- c(290.475, 247.900)
return_jedi <- c(309.306, 165.8)
# Crie box_office
box_office <-
# Crie star_wars_matrix
star_wars_matrix <-
```
*** =solution
```{r}
# Bilheteria de Star Wars (em milhões!)
new_hope <- c(460.998, 314.4)
empire_strikes <- c(290.475, 247.900)
return_jedi <- c(309.306, 165.8)
# Crie box_office
box_office <- c(new_hope, empire_strikes, return_jedi)
# Crie star_wars_matrix
star_wars_matrix <- matrix(box_office, nrow = 3, byrow = TRUE)
```
*** =sct
```{r}
msg <- "Não mude nada nas variáveis de bilheteria `new_hope`, `empire_strikes` e `return_jedi`!"
test_object("new_hope", undefined_msg = msg, incorrect_msg = msg)
test_object("empire_strikes", undefined_msg = msg, incorrect_msg = msg)
test_object("return_jedi", undefined_msg = msg, incorrect_msg = msg)
test_object("box_office", incorrect_msg = "Você combinou corretamente os valores de `new_hope`, `empire_strikes` e `return_jedi` no vetor `box_office`?")
test_function("matrix", c("data", "nrow", "byrow"),
incorrect_msg = "Tenha certeza de especificar corretamente os argumentos em `matrix()`: `box_office`, `nrow = 3`, `by_row = TRUE`.")
test_object("star_wars_matrix",
incorrect_msg = "Você armazenou corretamente o resultado de `matrix()` em `star_wars_matrix`?")
success_msg("Realmente a Força está com você! Continue para o próximo exercício")
```
--- type:NormalExercise xp:100 skills:1 key:f734e8bf74
## Nomeando uma matriz
Para te ajudar a lembrar o que é armazenado em `star_wars_matrix`, provavelmente você iria gostar de colocar o nome dos filmes em cada linha. Isso não só te ajudaria a ler seus dados, como também seria útil poder selecionar certos elementos na matriz.
Similar aos vetores, você pode adicionar nomes nas linhas e colunas de uma matriz
```
rownames(my_matrix) <- row_names_vector
colnames(my_matrix) <- col_names_vector
```
Nos adiantamos e preparamos dois vetores para você: `region`, e `titles`. Você precisará desses vetores para nomear as colunas e linhas de `star_wars_matrix`, respectivamente.
*** =instructions
- Use `colnames()` para nomear as colunas da matriz `star_wars_matrix` utilizando `region` como valor.
- Use `rownames()` para nomear as linhas de `star_wars_matrix` utilizando `titles` como valor.
- Exiba o valor de `star_wars_matrix` para ver o resultado do seu trabalho.
*** =hint
Você pode usar `colnames(star_wars_matrix) <- region` para nomear as colunas de `star_wars_matrix`. Faça algo similar para nomear as linhas.
*** =pre_exercise_code
```{r}
# no pec
```
*** =sample_code
```{r}
# Bilheteria de Star Wars (em milhões!)
new_hope <- c(460.998, 314.4)
empire_strikes <- c(290.475, 247.900)
return_jedi <- c(309.306, 165.8)
# Construa uma matriz
star_wars_matrix <- matrix(c(new_hope, empire_strikes, return_jedi), nrow = 3, byrow = TRUE)
# Vetores region e title, que serão usados para nomear
region <- c("US", "non-US")
titles <- c("A New Hope", "The Empire Strikes Back", "Return of the Jedi")
# Use region para nomear as colunas
# Use titles para nomear as linhas
# Exiba star_wars_matrix
```
*** =solution
```{r}
# Bilheteria de Star Wars (em milhões!)
new_hope <- c(460.998, 314.4)
empire_strikes <- c(290.475, 247.900)
return_jedi <- c(309.306, 165.8)
# Construa uma matriz
star_wars_matrix <- matrix(c(new_hope, empire_strikes, return_jedi), nrow = 3, byrow = TRUE)
# Vetores region e title, que serão usados para nomear
region <- c("US", "non-US")
titles <- c("A New Hope", "The Empire Strikes Back", "Return of the Jedi")
# Use region para nomear as colunas
colnames(star_wars_matrix) <- region
# Use titles para nomear as linhas
rownames(star_wars_matrix) <- titles
# Exiba star_wars_matrix
star_wars_matrix
```
*** =sct
```{r}
msg <- "Não mude nada nas variáveis de bilheteria `new_hope`, `empire_strikes` e `return_jedi`!"
test_object("new_hope", undefined_msg = msg, incorrect_msg = msg)
test_object("empire_strikes", undefined_msg = msg, incorrect_msg = msg)
test_object("return_jedi", undefined_msg = msg, incorrect_msg = msg)
msg <- "Não altere o conteúdo de `star_wars_matrix`; somente o nomes das colunas e linhas!"
test_object("star_wars_matrix", incorrect_msg = msg)
msg <- "Não altere nada nos vetores `region` e `titles`. Eles já foram definidos para você."
test_object("region", undefined_msg = msg, incorrect_msg = msg)
test_object("titles", undefined_msg = msg, incorrect_msg = msg)
test_object("star_wars_matrix", eq_condition = "equal",
incorrect_msg = "Você definiu as linhas e colunas de `star_wars_matrix` corretamente? Use `colnames(star_wars_matrix) <- region` para nomear as colunas; faça algo similar com as linhas.")
test_output_contains("star_wars_matrix", incorrect_msg = "Não se esqueça de exibir `star_wars_matrix` depois que você nomear as linhas e colunas.")
success_msg("Bom trabalho! Você está no caminho de se tornar um jedi em R! Continue para o próximo exercício.")
```
--- type:NormalExercise xp:100 skills:1 key:3fd7499a12
## Calculando a bilheteria mundial
A coisa mais importante para que um filme se torne uma lenda é a sua bilheteria mundial.
Para calcular o faturamento total da bilheteria dos três primeiros filmes de Star Wars, você precisará pegar a soma das colunas US e non-US na matriz.
Em R, a função [`rowSums()`](http://www.rdocumentation.org/packages/base/functions/colSums) convenientemente calcula o total de cada linha de uma matriz. Essa função cria um novo vetor:
```
rowSums(my_matrix)
```
*** =instructions
Calcule a bilheteria mundial dos três filmes e armazene-os em um vetor chamado `worldwide_vector`.
*** =hint
`rowSums(star_wars_matrix)` irá calcular a soma de cada linha, criando assim o total de bilheteria para cada filme.
*** =pre_exercise_code
```{r}
# no pec
```
*** =sample_code
```{r}
# Construa star_wars_matrix
box_office <- c(460.998, 314.4, 290.475, 247.900, 309.306, 165.8)
star_wars_matrix <- matrix(box_office, nrow = 3, byrow = TRUE,
dimnames = list(c("A New Hope", "The Empire Strikes Back", "Return of the Jedi"),
c("US", "non-US")))
# Calcule a bilheteria mundial
worldwide_vector <-
```
*** =solution
```{r}
# Construa star_wars_matrix
box_office <- c(460.998, 314.4, 290.475, 247.900, 309.306, 165.8)
star_wars_matrix <- matrix(box_office, nrow = 3, byrow = TRUE,
dimnames = list(c("A New Hope", "The Empire Strikes Back", "Return of the Jedi"),
c("US", "non-US")))
# Calcule a bilheteria mundial
worldwide_vector <- rowSums(star_wars_matrix)
```
*** =sct
```{r}
msg <- "Não altere nada nas variáveis `box_office_all` e `star_wars_matrix`!"
test_object("box_office", undefined_msg = msg, incorrect_msg = msg)
test_object("star_wars_matrix", undefined_msg = msg, incorrect_msg = msg)
test_object("worldwide_vector", incorrect_msg = "Digite `rowSums()` usando `star_wars_matrix` como argumento e armazene o resultado em `worldwide_vector`.")
success_msg("Muito bem! Continue para o próximo exercício.")
```
--- type:NormalExercise xp:100 skills:1 key:86b87a8545
## Adicionando uma coluna para a bilheteria mundia
No exercício anterior você calculou o vetor que contém a bilheteria recebida por cada um dos três primeiros filmes de Star Wars. Contudo, esse vetor não faz parte da matriz `star_wars_matrix`.
Você pode adicionar uma ou várias colunas a uma matriz com a função [`cbind()`](http://www.rdocumentation.org/packages/base/functions/cbind), que une matrizes e/ou vetores por uma coluna. Por exemplo:
```
big_matrix <- cbind(matrix1, matrix2, vector1 ...)
```
*** =instructions
Adicione `worldwide_vector` como uma nova coluna de `star_wars_matrix` e armazene o resultado em `all_wars_matrix`. Use a função [`cbind()`](http://www.rdocumentation.org/packages/base/functions/cbind).
*** =hint
Neste exercício, você deve passar duas variáveis para `cbind()`: `star_wars_matrix` e `worldwide_vector`, nesta mesma ordem. Armazene o resultado em `all_wars_matrix`.
*** =pre_exercise_code
```{r}
# no pec
```
*** =sample_code
```{r}
# Construa star_wars_matrix
box_office <- c(460.998, 314.4, 290.475, 247.900, 309.306, 165.8)
star_wars_matrix <- matrix(box_office, nrow = 3, byrow = TRUE,
dimnames = list(c("A New Hope", "The Empire Strikes Back", "Return of the Jedi"),
c("US", "non-US")))
# A bilheteria mundial
worldwide_vector <- rowSums(star_wars_matrix)
# Coloque a nova variável worldwide_vector como uma coluna em star_wars_matrix
all_wars_matrix <-
```
*** =solution
```{r}
# Construa star_wars_matrix
box_office <- c(460.998, 314.4, 290.475, 247.900, 309.306, 165.8)
star_wars_matrix <- matrix(box_office, nrow = 3, byrow = TRUE,
dimnames = list(c("A New Hope", "The Empire Strikes Back", "Return of the Jedi"),
c("US", "non-US")))
# A bilheteria mundial
worldwide_vector <- rowSums(star_wars_matrix)
# Coloque a nova variável worldwide_vector como uma coluna em star_wars_matrix
all_wars_matrix <- cbind(star_wars_matrix, worldwide_vector)
```
*** =sct
```{r}
msg <- "Não altere nada nas variáveis `box_office_all` e `star_wars_matrix`!"
test_object("box_office", undefined_msg = msg, incorrect_msg = msg)
test_object("star_wars_matrix", undefined_msg = msg, incorrect_msg = msg)
test_object("worldwide_vector",
incorrect_msg = "Armazene o resultado de `rowSums(star_wars_matrix)` em `worldwide_vector`.")
msg <- "Você usou a função `cbind()` corretamente para adicionar `worldwide_vector` em `star_wars_matrix`? Você deve passar `star_wars_matrix` e `world_wide_vector` como argumento em `cbind()`, nesta mesma ordem. A matriz resultante `all_wars_matrix` deve conter 3 linhas e 3 colunas."
test_object("all_wars_matrix", incorrect_msg = msg)
success_msg("Bom trabalho! Depois de adicionar uma coluna a uma matriz, o próximo passo é adicionar linhas. Vamos aprender como fazer no próximo exercício.");
```
--- type:NormalExercise xp:100 skills:1 key:bcadb29139
## Adicionando uma linha
Assim como cada ação tem uma reação, cada [`cbind()`](http://www.rdocumentation.org/packages/base/functions/cbind) tem um [`rbind()`](http://www.rdocumentation.org/packages/base/functions/cbind). (OK, a gente admite: somo bem ruinzinhos em metáforas.)
seu workspace de R, onde todas as suas variáveis 'vivem' ([confira o que é um workspace](http://www.statmethods.net/interface/workspace.html)), foi iniciado e contém duas matrizes:
- `star_wars_matrix`: a qual estivemos usado até agora, com dados da primeira trilogia,
- `star_wars_matrix2`, com dados similares da segunda trilogia.
Digite o nome dessas matrizes no console e aperta `ENTER` se você quiser ter um olhar mais detalhado sobre seu conteúdo. Se você quiser conferir os conteúdos da workspace, você pode digitar `ls()` no console.
*** =instructions
Use `rbind()` para juntar `star_wars_matrix` e `star_wars_matrix2`, nesta mesma ordem. Armazene a matriz resultante em `all_wars_matrix`.
*** =hint
Junte duas matrizes assim:
```
rbind(matrix1, matrix2)
```
Armazene o resultado em `all_wars_matrix`.
*** =pre_exercise_code
```{r}
# Construindo a matriz
box_office_all <- c(461, 314.4, 290.5, 247.9, 309.3, 165.8)
movie_names <- c("A New Hope","The Empire Strikes Back","Return of the Jedi")
col_titles <- c("US","non-US")
star_wars_matrix <- matrix(box_office_all, nrow = 3, byrow = TRUE, dimnames = list(movie_names, col_titles))
# Construindo a matrix2
box_office_all2 <- c(474.5, 552.5, 310.7, 338.7, 380.3, 468.5)
movie_names2 <- c("The Phantom Menace", "Attack of the Clones", "Revenge of the Sith")
star_wars_matrix2 <- matrix(box_office_all2, nrow=3, byrow = TRUE, dimnames = list(movie_names2, col_titles))
# Remove tudo menos all_wars_matrix
rm(box_office_all)
rm(movie_names)
rm(col_titles)
rm(box_office_all2)
rm(movie_names2)
```
*** =sample_code
```{r}
# star_wars_matrix e star_wars_matrix2 estão disponíveis em seu workspace
star_wars_matrix
star_wars_matrix2
# Combine ambas as trilogias de Star Wars em uma matriz
all_wars_matrix <-
```
*** =solution
```{r}
# # star_wars_matrix e star_wars_matrix2 estão disponíveis em seu workspace
star_wars_matrix
star_wars_matrix2
# Combine ambas as trilogias de Star Wars em uma matriz
all_wars_matrix <- rbind(star_wars_matrix, star_wars_matrix2)
```
*** =sct
```{r}
msg = "Não sobreponha as variáveis que foram definidas para você no workspace (`star_wars_matrix` e `star_wars_matrix2`)."
test_object("star_wars_matrix", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_object("star_wars_matrix2", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_object("all_wars_matrix", incorrect_msg = "Você usou `rbind()` corretamente para criar `all_wars_matrix()`? `rbind()` usa dois argumentos: `star_wars_matrix` e `star_wars_matrix2`, nesta mesma ordem.")
success_msg("Maravilha! Continue para o próximo exercício para ver como você pode combinar os resultados da função `rbind()` com a função `colSums()`!")
```
--- type:NormalExercise xp:100 skills:1 key:1bfe5ae096
## Total de bilheteria da saga inteira
Assim como cada [`cbind()`](http://www.rdocumentation.org/packages/base/functions/cbind) tem um [`rbind()`](http://www.rdocumentation.org/packages/base/functions/cbind), todo [`colSums()`](http://www.rdocumentation.org/packages/base/functions/colSums) tem um [`rowSums()`](http://www.rdocumentation.org/packages/base/functions/colSums). Seu workspace já contém a matriz `all_wars_matrix` que você construiu no exercício anterior; digite `all_wars_matrix` para dar uma olhada. Vamos agora calcular o total de bilheteria para toda a saga.
*** =instructions
- Calcule o total de revenda para as regiões US e non-US e armazene em `total_revenue_vector`. Você pode usar a função [`colSums()`](http://www.rdocumentation.org/packages/base/functions/colSums).
- Exiba `total_revenue_vector` para olhar os resultados.
*** =hint
Você deve usar a função [`colSums()`](http://www.rdocumentation.org/packages/base/functions/colSums) com `star_wars_matrix` como argumento para encontrar o total de bilheteria por região.
*** =pre_exercise_code
```{r}
load(url("http://s3.amazonaws.com/assets.datacamp.com/course/intro_to_r/all_wars_matrix.RData"))
```
*** =sample_code
```{r}
# all_wars_matrix está disponível em seu workspace
all_wars_matrix
# Total de revenda para US e non-US
total_revenue_vector <-
# Exiba total_revenue_vector
```
*** =solution
```{r}
# all_wars_matrix está disponível em seu workspace
all_wars_matrix
# Total de revenda para US e non-US
total_revenue_vector <- colSums(all_wars_matrix)
# Exiba total_revenue_vector
total_revenue_vector
```
*** =sct
```{r}
msg = "Não altere o conteúdo de `all_wars_matrix`; ele foi criado para você no workspace."
test_object("all_wars_matrix", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_function("colSums", "x", incorrect_msg = "Você usou a função `colSums()` em all_wars_matrix?")
test_object("total_revenue_vector",
incorrect_msg = "Você armazenou corretamente o resultado de `colSums(all_wars_matrix)` em `total_revenue_vector`?")
test_output_contains("total_revenue_vector", incorrect_msg = "Não esqueça de exibir `total_revenue_vector`!")
success_msg("Excelente! Avance para o próximo exercício.")
```
--- type:NormalExercise xp:100 skills:1 key:41d9d69713
## Selecionando elementos da matriz
Igual aos vetores, você pode usar colchetes ``[ ]` para selecionar um ou múltiplos elementos de uma matriz. Enquanto nos vetores você possui apenas uma dimensão, nas matrizes você possui duas dimensões. Você deve, portanto, usar vírgulas para separar que elemento você quer selecionar e de qual coluna. Por exemplo:
- `my_matrix[1,2]` seleciona o elemento na primeira linha e segunda coluna.
- `my_matrix[1:3,2:4]` resulta em uma matriz com os dados da linha 1, 2, 3 e colunas 2, 3, 4.
Se você quer selecionar todos os elementos de uma linha ou coluna, nenhum número é necessário antes ou depois da vírgula, respectivamente:
- `my_matrix[,1]` seleciona todos os elementos da primeira coluna.
- `my_matrix[1,]` seleciona todos os elementos da primeira linhas.
Após sabermos disso, vamos voltar para Star Wars! Assim como no exercício anterior, `all_wars_matrix` já está disponível em seu workspace.
*** =instructions
- Selecione a coluna non-US para todos os filmes (toda a segunda coluna de `all_wars_matrix`) e armazene o resultado em `non_us_all`.
- Use `mean()` em `non_us_all` para calcular a média de faturamento de todos os filmes em países que não são os EUA. Simplesmente exiba o resultado no console.
- Dessa vez, selecione o faturamento fora dos EUA para os dois primeiros filmes em `all_wars_matrix`. Armazene o resultado em `non_us_some`.
- Use `mean()` de novo para exibir a média de valores em `non_us_some`.
*** =hint
Você pode selecionar a segunda coluna inteira da matriz `my_matrix` com `my_matrix[,2]`.
*** =pre_exercise_code
```{r}
load(url("http://s3.amazonaws.com/assets.datacamp.com/course/intro_to_r/all_wars_matrix.RData"))
```
*** =sample_code
```{r}
# all_wars_matrix está disponível em seu workspace
all_wars_matrix
# Selecione o faturamento fora dos EUA para todos os filmes
non_us_all <-
# Média do faturamento fora dos EUA
# Selecione o faturamento fora dos EUA para os dois primeiros filmes
non_us_some <-
# Média do faturamento fora dos EUA para os dois primeiros filmes
```
*** =solution
```{r}
# all_wars_matrix está disponível em seu workspace
all_wars_matrix
# Selecione o faturamento fora dos EUA para todos os filmes
non_us_all <- all_wars_matrix[,2]
# Média do faturamento fora dos EUA
mean(non_us_all)
# Selecione o faturamento fora dos EUA para os dois primeiros filmes
non_us_some <- all_wars_matrix[1:2,2]
# Média do faturamento fora dos EUA para os dois primeiros filmes
mean(non_us_some)
```
*** =sct
```{r}
msg = "Não altere o conteúdo de `all_wars_matrix`; essa matriz já foi criada para você no workspace."
test_object("all_wars_matrix", undefined_msg = msg, incorrect_msg = msg)
test_object("non_us_all",
incorrect_msg = "Você armazenou em `non_us_all` a segunda coluna inteira de `all_wars_matrix`? Você pode usar `[, 2]` para fazer isso!")
test_output_contains("mean(non_us_all)",
incorrect_msg = "Você calculou a média dos valores em `non_us_all` ao usar `mean(non_us_all)`? Simplesmente exiba o resultado.")
test_object("non_us_some",
incorrect_msg = "Você armazenou em `non_us_some` o faturamento fora dos EUA para os dois primeiros filmes? Você pode usar `[1:2,2]` para fazer isso!")
test_output_contains("mean(non_us_some)",
incorrect_msg = "Você calculou a média dos valores em `non_us_some` usando `mean(non_us_some)`?simplesmente exiba o resultado.")
success_msg("Boa! Continue para o próximo exercício.")
```
--- type:NormalExercise xp:100 skills:1 key:c81c656f06
## Um pequeno problema de aritmética com matrizes
De forma similiar ao que você aprendeu com vetores, operadores padrão, como `+`, `-`, `/`, `*`, etc., funcionam da mesma forma com matrizes em R.
Por exemplo, `2 * my_matrix` multiplica cada elemento de `my_matrix` por dois.
Como um Analista de Dados recém-contratado pelas Lucasfilm, é seu trabalho encontrar quantos visitantes foram para cada filme em cada região geográfica. Você já tem o total de faturamento em `all_wars_matrix`. Suponha que o preço do ingresso foi 5 dólares. Se você simplesmente dividir o número da bilheteria pelo preço do ingresso, você terá o número de visitantes.
*** =instructions
- Divida `all_wars_matrix` por 5, que dará a você o número de visitantes em milhões. Armazene a matriz resultante em `visitors`.
- Exiba `visitors` para que você possa dar uma olhada.
*** =hint
O número de visitantes é igual a `all_wars_matrix` dividido por 5.
*** =pre_exercise_code
```{r}
load(url("http://s3.amazonaws.com/assets.datacamp.com/course/intro_to_r/all_wars_matrix.RData"))
```
*** =sample_code
```{r}
# all_wars_matrix está disponível em seu workspace
all_wars_matrix
# Estime os visitantes
visitors <-
# Exiba a estimativa no console
```
*** =solution
```{r}
# all_wars_matrix está disponível em seu workspace
all_wars_matrix
# Estime os visitantes
visitors <- all_wars_matrix / 5
# Exiba a estimativa no console
visitors
```
*** =sct
```{r}
msg = "Não altere o conteúdo de `all_wars_matrix`; essa matriz já foi criada para você no workspace."
test_object("all_wars_matrix", undefined_msg = msg, incorrect_msg = msg)
test_object("visitors",
incorrect_msg = "Parece que `visitors` não está correto. Simplesmente divida `all_wars_matrix` por 5 e armazene a matriz resultante em `visitors`.")
test_output_contains("visitors", incorrect_msg = "Não esqueça de exibir `visitors` para que você possa visualizá-lo.")
success_msg("Excelente! O que esse resultado diz a você? Que 92 milhões de pessoas foram assistir Uma Nova Esperança nos cinemas americanos. Continue para o próximo exercício!")
```
--- type:NormalExercise xp:100 skills:1 key:1e0b39d6e9
## Um pequeno problema de aritmética com matrizes (2)
Assim como `2 * my_matrix` multiplica cada elemento de `my_matrix` por dois, `my_matrix1 * my_matrix2` cria uma nova matriz onde cada elemento é o produto correspondente dos elementos em `my_matrix1` e `my_matrix2`.
Após olhar os resultados do exercício anterior, seu chefe lhe informou que o valor dos ingressos aumentou com o decorrer do tempo. Ele pediu para você refazer a análise, usando como base os preços em`ticket_prices_matrix` (fonte: imaginação).
_Aqueles que estão familiarizado com matrizes devem ter notado que está não é uma multiplicação padrão de matrizes, para as quais você deve usar `%*%` em R._
*** =instructions
- Divida `all_wars_matrix` por `ticket_prices_matrix` para ter um número estimado de visitantes para os seis primeiros filmes, tanto nos EUA quanto fora do EUA. Armazene o resultado em `visitors`.
- A partir da matriz `visitors`, selecione a primeira coluna inteira, que representa o número de visitantes nos EUA. Armazene a seleção em `us_visitors`.
- Calcule o número médio de visitantes nos EUA; exiba o resultado.
*** =hint
- Você pode usar a função `mean()` para calcular a média dos valores enviados para essa função.
- Para ter o número de visitantes nos EUA, selecione a primeira coluna de `visitors` usando `visitors[ ,1]`.
*** =pre_exercise_code
```{r}
load(url("http://s3.amazonaws.com/assets.datacamp.com/course/intro_to_r/all_wars_matrix.RData"))
movie_names <- c("A New Hope","The Empire Strikes Back","Return of the Jedi", "The Phantom Menace", "Attack of the Clones", "Revenge of the Sith")
col_titles <- c("US","non-US")
ticket_prices_matrix <- matrix(c(5, 5, 6, 6, 7, 7, 4, 4, 4.5, 4.5, 4.9, 4.9), nrow = 6, byrow = TRUE, dimnames = list(movie_names,col_titles))
```
*** =sample_code
```{r}
# all_wars_matrix e ticket_prices_matrix estão disponíveis em seu workspace
all_wars_matrix
ticket_prices_matrix
# Número estimado de visitantes
visitors <-
# Visitantes nos EUA
us_visitors <-
# Média de visitantes nos EUA
```
*** =solution
```{r}
# all_wars_matrix e ticket_prices_matrix estão disponíveis em seu workspace
all_wars_matrix
ticket_prices_matrix
# Número estimado de visitantes
visitors <- all_wars_matrix / ticket_prices_matrix
# Visitantes nos EUA
us_visitors <- visitors[ ,1]
# Média de visitantes nos EUA
mean(us_visitors)
```
*** =sct
```{r}
msg <- "Não altere o conteúdo de `all_wars_matrix`; essa matriz já foi criada para você no workspace."
test_object("all_wars_matrix", undefined_msg = msg, incorrect_msg = msg)
test_object("ticket_prices_matrix", undefined_msg = msg, incorrect_msg = msg)
test_object("visitors",
incorrect_msg = "Você criou corretamente a matriz `visitors`? Você deve dividir `all_wars_matrix` por `ticket_prices_matrix` para conseguir o resultado.")
test_object("us_visitors", incorrect_msg = "Para criar `us_visitors`, você deve selecionar corretamente a primeira coluna inteira de `visitors`. Você pode usar `[,1]` para isso!")
test_output_contains("mean(us_visitors)", incorrect_msg = "Uma vez criada `us_visitors`, você pode usar a função `mean()` para calcular o número média de visitantes nos EUA. Tenha certeza de exibir o resultado.")
success_msg("É fato: a Força R está com você! Esse exercício conclui o capítulo de matrizes. Próxima parada na jornada da linguagem R: fatores.")
```