-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathchapter4.Rmd
563 lines (413 loc) · 24.2 KB
/
chapter4.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
---
title_meta : Capítulo 4
title : Fatores (Factors)
description : Frequentemente, dados caem em uma quantidade limitada de categorias. Por exemplo, humanos são macho ou fêmea. Em R, dados categóricos são armazenados nos chamados fatores. Dada a importância desses fatores em análise de dados, você deve começar a aprender como criá-los, dividí-los e compará-los.
--- type:NormalExercise xp:100 skills:1 key:05273321916d99bb9c0deadf75c6834d25a47244
## O que é um factor e por que eu devo usá-lo?
Neste capítulo você irá se aventurar pelo maravilhoso mundo dos **fatores**.
O termo fator se refere a um tipo de dado estatístico usado para armazenar variáveis categóricas. A diferença entre uma variável categórica e uma variável contínua é que, uma variável categórica pode pertencer a um **número limitado de categorias**. Uma variável contínua, por sua vez, pode corresponder a um número infinito de valores.
É importante que a linguagem R saiba se está trabalhando com uma variável contínua ou categórica, já que os modelos estatísticos que você irá desenvolver no futuro tratam estes dados diferentemente. (Você vai ver depois por que isso é importante.)
Um bom exemplo de variável categórica é a variável `Gender`. Um indivíduo humano pode ser considerado "Male" (Macho) ou "Female" (Fêmea). Sendo assim, macho e fêmea são, de forma simplificada, os dois valores da variável categórica "Gender", e cada observação pode ser armazenada com o valor "Male" ou "Female".
*** =instructions
Armazene na variável `theory` o valor `"factors for categorical variables"`.
*** =hint
Simplesmente armazene o valor na variável utilizando `<-`; cuidado com letras maiúsculas.
*** =pre_exercise_code
```{r}
# no pec
```
*** =sample_code
```{r}
# Armazene na variável theory o que foi pedido!
```
*** =solution
```{r}
# Armazene na variável theory o que foi pedido!
theory <- "factors for categorical variables"
```
*** =sct
```{r}
# MC-note: ideally, we could check for commonly mistyped variable names
#test_or({
# bad_names <- c('Theory', "teory", "thoery", "theroy", "theiory", 'gender', 'value')
# lapply(bad_names, test_object, eval=FALSE)
# })
msg_undef <- "Parece que você não definiu a variável `theory`."
msg_incor <- "O valor em `theory` parece incorreto. Tenha certeza de armazenar nela a string `\"factors for categorical variables\"`. Lembre-se que R é case sensitive."
msg_err <- "Tenha certeza de que você definiu `theory` corretamente, usando `<-`."
# If get error and theory is undefined, point out the error
test_or(test_error(msg_err), test_object("theory", eval = FALSE))
test_object("theory", undefined_msg = msg_undef, incorrect_msg = msg_incor)
success_msg("Bom trabalho! Pronto para começar? Continue para o próximo exercício!")
```
--- type:NormalExercise xp:100 skills:1 key:6cc21c842b075347926bb1b244782213df32e370
## O que é um factor e por que eu devo usá-lo? (2)
Para criar um fator em R, você precisa usar a função [`factor()`](http://www.rdocumentation.org/packages/base/functions/factor). A primeira coisa que você tem que fazer é criar um vetor que contenha todas as observações que pertencem a um limitado número de categorias. Por exemplo, `gender_vector` contém o sexo de 5 diferentes indivíduos:
```
gender_vector <- c("Male","Female","Female","Male","Male")
```
Está claro que há duas categorias, ou, segundo os termos em R, **'factor levels'** (Níveis de fatores): "Male" e "Female".
A função [`factor()`](http://www.rdocumentation.org/packages/base/functions/factor) vai codificar o vetor como um fator:
```
factor_gender_vector <- factor(gender_vector)
```
*** =instructions
- Converta os caracteres do vetor `gender_vector` para fator com a função `factor()` e armazene o resultado em `factor_gender_vector`.
- Exiba `factor_gender_vector` e confirme que R exibiu os níveis de fatores abaixo dos valores atuais.
*** =hint
Simplesmente use a função [`factor()`](http://www.rdocumentation.org/packages/base/functions/factor) em `gender_vector`. Dê uma olhada na descrição da tarefa, a resposta já está ali em algum lugar...
*** =pre_exercise_code
```{r}
# no pec
```
*** =sample_code
```{r}
# Gender_vector
gender_vector <- c("Male", "Female", "Female", "Male", "Male")
# Converta gender_vector para fator
factor_gender_vector <-
# Exiba factor_gender_vector
```
*** =solution
```{r}
# Gender_vector
gender_vector <- c("Male", "Female", "Female", "Male", "Male")
# Converta gender_vector para fator
factor_gender_vector <- factor(gender_vector)
# Exiba factor_gender_vector
factor_gender_vector
```
*** =sct
```{r}
test_object("factor_gender_vector",
incorrect_msg = "Você armazenou o fator de `gender_vector` em `factor_gender_vector`?")
test_output_contains("factor_gender_vector", incorrect_msg = "Não esqueça de exibir `factor_gender_vector`!")
success_msg("Muito bom! Se você quer saber mais sobre a função `factor()`, não hesite em digitar `?factor` no console. Isso vai abrir uma página de ajuda. Continue para o próximo exercício.");
```
--- type:NormalExercise xp:100 skills:1 key:5bd4f50afc2c2dbc881e16b8ca94ca56960dff42
## O que é um factor e por que eu devo usá-lo? (3)
Há dois tipos de variáveis categóricas: a **variável categórica nominal** e a **variável categórica ordinal**.
Uma variável nominal é uma variável categórica sem valor implícito. Isso significa que é impossível dizer que 'um vale mais que o outro'. Por exemplo, imagine uma variável categórica chamada `animals_vector` com as categorias `"Elefante"`, `"Girafa"`, `"Macaco"` e `"Cavalo"`. Note que é impossível dizer que um dos animais é melhor ou pior que o outro. (Claro que alguns de vocês deve descordar ;-) ).
Em contrapartida, variáveis ordinais possuem uma ordem natural. Considere o seguinte exemplo de variável categórica chamada `temperature_vector` com as categorias: `"Baixo"`, `"Médio"` e `"Alto"`. Aqui é óbvio que `"Médio"` fica acima de `"Baixo"`, enquanto `"Alto"` fica acima de `"Médio"`.
*** =instructions
Clique em `Submit Answer` para verificar como R constroe e exibe variáveis nominais e ordinais. Não se preocupe se você não entende todo o código ainda, você vai chegar lá.
*** =hint
Apenas clique no botão `Submit Answer` e veja o console. Note que R indica a ordem dos níveis dos fatores para as variáveis categóricas ordinais.
*** =pre_exercise_code
```{r}
# no pec
```
*** =sample_code
```{r}
# Animais
animals_vector <- c("Elephant", "Giraffe", "Donkey", "Horse")
factor_animals_vector <- factor(animals_vector)
factor_animals_vector
# Temperatura
temperature_vector <- c("High", "Low", "High","Low", "Medium")
factor_temperature_vector <- factor(temperature_vector, order = TRUE, levels = c("Low", "Medium", "High"))
factor_temperature_vector
```
*** =solution
```{r}
# Animais
animals_vector <- c("Elephant", "Giraffe", "Donkey", "Horse")
factor_animals_vector <- factor(animals_vector)
factor_animals_vector
# Temperatura
temperature_vector <- c("High", "Low", "High","Low", "Medium")
factor_temperature_vector <- factor(temperature_vector, order = TRUE, levels = c("Low", "Medium", "High"))
factor_temperature_vector
```
*** =sct
```{r}
msg <- "Não altere nada no código de exemplo. Simplesmente pressione o botão Submit Answer e olhe a solução!"
test_object("animals_vector", undefined_msg = msg, incorrect_msg = msg)
test_object("temperature_vector", undefined_msg = msg, incorrect_msg = msg)
test_object("factor_animals_vector", undefined_msg = msg, incorrect_msg = msg)
test_output_contains("factor_animals_vector", incorrect_msg = msg)
test_object("factor_temperature_vector", undefined_msg = msg, incorrect_msg = msg)
test_output_contains("factor_temperature_vector", incorrect_msg = msg)
success_msg("Você consegue dizer o que está acontecendo no exercício? Incrível! Continue para o próximo exercício e saiba mais sobre os níveis de fatores.")
```
--- type:NormalExercise xp:100 skills:1 key:1aa698978d32d1a0befa4700d7da85a648e1d69e
## Níveis de fatores (Factor levels)
Quando você começa um conjunto de dados, você Frequentemente notar que ele contém fatores com específicos níveis. Contudo, algumas vezes você precisará mudar os nomes desses níveis para esclarecimento ou outras razões. R permite você fazer isso com a função [`levels()`](http://www.rdocumentation.org/packages/base/functions/levels):
```
levels(factor_vector) <- c("name1", "name2",...)
```
Um bom exemplo de ilustração são os dados brutos que são providos a você por um questionário. Uma pergunta padrão feita as pessoas que respondem a um questionário é o gênero que ele corresponde. Você deve se lembrar do exercício anterior que isso é um fator e, quando é realizado o questionamento nas ruas seus nívels geralmente são `"M"` e `"F"`.
```
survey_vector <- c("M", "F", "F", "M", "M")
```
Em seguida, quando você quer iniciar sua análise de dados, sua principal preocupação é ter um bom resumo de todas as variáveis e seus significados. Nesse ponto, você provavelmente mudará o nível dos fatores para `"Male"` e `"Female"`, ao invés de `"M"` e `"F"`, tudo isso para tornar sua vida mais fácil.
**Watch out:** A ordem que você usa para definir os níveis é importante! Se você digitar `levels(factor_survey_vector)`, você verá que ele exibe `[1] "F" "M"`. Se você não especifícar os níveis do fator quando criar o vetor, `R` irá definir definí-lo por ordem alfabética, automaticamente. Para mapear corretamente `"F"` para `"Female"`e `"M"` para `"Male"`, os níveis devem ser definidos como `c("Female", "Male")`, nesta mesma ordem.
*** =instructions
- Verifique o código que cria um fator em `survey_vector`. Você deve usar `factor_survey_vector` na próxima instrução.
- Mude os níveis de fator em `factor_survey_vector` para `c("Female", "Male")`. Lembre-se da ordem correta dos elementos do vetor.
*** =hint
Tenha atenção a ordem dos níveis de fator que você deve digitar. Dica: olhe a ordem em que os níveis são exibidos ao digitar `levels(factor_survey_vector)`.
*** =pre_exercise_code
```{r}
# no pec
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
```
*** =sample_code
```{r}
# Código para criar factor_survey_vector
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Especifique os níveis em factor_survey_vector
levels(factor_survey_vector) <-
factor_survey_vector
```
*** =solution
```{r}
# Código para criar factor_survey_vector
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Especifique os níveis em factor_survey_vector
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
```
*** =sct
```{r}
msg = "Não altere a definição de `survey_vector`!"
test_object("survey_vector", undefined_msg = msg, incorrect_msg = msg)
msg = "Não altere ou remova o código que cria o vetor de fatores"
test_function("factor", "x", not_called_msg = msg, incorrect_msg = msg)
# MC-note: ideally would want to test assign operator `<-`, and have it highlight whole line.
# MC-note: or negate this test_student_typed, to highlight where they type this incorrect phrase
# test_student_typed('c("Male", "Female")')
test_object("factor_survey_vector", eq_condition = "equal",
incorrect_msg = paste("Você definiu corretamente os níveis de fator para `factor_survey_vector`? Use `levels(factor_survey_vector) <- c(\"Female\", \"Male\")`. Lembre-se que R é case sensitive!"))
success_msg("Maravilha! Prossiga para o próximo exercício.")
```
--- type:NormalExercise xp:100 skills:1 key:a549f13c0644ccc89cd39a10aa48706754637ed0
## Resumindo um fator
Depois deste curso, uma de suas funções favoritas em R será [`summary()`](http://www.rdocumentation.org/packages/base/functions/summary). Ela te dará um rápido resumo sobre o conteúdo da variável:
```
summary(my_var)
```
Voltando ao nosso questionário, você deve querer saber quantas respostas `"Male"` você teve em seu estudo, e quantas respostas `"Female"` também. A função [`summary()`](http://www.rdocumentation.org/packages/base/functions/summary) lhe dará as respostas para essa pergunta.
*** =instructions
Use [`summary()`](http://www.rdocumentation.org/packages/base/functions/summary) em `survey_vector` e `factor_survey_vector`. Interprete os resultados de ambos os vetores.
*** =hint
Use a função [`summary()`](http://www.rdocumentation.org/packages/base/functions/summary) em `survey_vector` e `factor_survey_vector`, simplesmente assim!
*** =pre_exercise_code
```{r}
# no pec
```
*** =sample_code
```{r}
# Crie factor_survey_vector com os níveis limpos
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
# Gere um summary para survey_vector
# Gere um summary para factor_survey_vector
```
*** =solution
```{r}
# Crie factor_survey_vector com os níveis limpos
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
# Gere um summary para survey_vector
summary(survey_vector)
# Gere um summary para factor_survey_vector
summary(factor_survey_vector)
```
*** =sct
```{r}
msg = "Não altere nada nas linhas iniciais que declaram `survey_vector` e `factor_survey_vector`."
test_object("survey_vector", undefined_msg = msg, incorrect_msg = msg)
test_object("factor_survey_vector", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
msg <- "Você usou corretamente `summary()` para gerar o summary para `%s`?"
test_output_contains("summary(survey_vector)", incorrect_msg = sprintf(msg, "survey_vector"))
test_output_contains("summary(factor_survey_vector)", incorrect_msg = sprintf(msg, "factor_survey_vector"))
success_msg("Boa! Dê uma olhada na saída do código. Devido ao fato de você identificar `\"Male\"` e `\"Female\"` como níveis de fator em `factor_survey_vector` permite a R exibir o número de elementos para cada categoria.")
```
--- type:NormalExercise xp:100 skills:1 key:90ecc160d1ebf2f75bf53f9c3843fc1632bdd0a5
## Batalha dos sexos
Em `factor_survey_vector` nós temos um fator com dois níveis: Male (Macho) e Female (Fêmea). Mas, como R avalia estes níveis uns com os outros? Em outras palavras, quem a linguagem R vai pensar que é melhor: macho ou fêmea?
*** =instructions
Leia o código no editor e clique em 'Submit Answer' para ver se machos valem mais que fêmeas.
*** =hint
Apenas clique em 'Submit Answer' e dê uma olhada na saída do código que é exibido no console.
*** =pre_exercise_code
```{r}
# no pec
```
*** =sample_code
```{r}
# Cria factor_survey_vector com os níveis limpos
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
levels(factor_survey_vector) <- c("Female", "Male")
# Macho
male <- factor_survey_vector[1]
# Fêmea
female <- factor_survey_vector[2]
# Batalha dos sexos: Macho é maior que Fêmea?
male > female
```
*** =solution
```{r}
# Cria factor_survey_vector com os níveis limpos
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
levels(factor_survey_vector) <- c("Female", "Male")
# Macho
male <- factor_survey_vector[1]
# Fêmea
female <- factor_survey_vector[2]
# Batalha dos sexos: Macho é maior que Fêmea?
male > female
```
*** =sct
```{r}
msg = "Não altere nada no código, simplesmente clique em 'Submit Answer' e olhe o resultado."
test_object("survey_vector", undefined_msg = msg, incorrect_msg = msg)
test_object("factor_survey_vector", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_object("male", undefined_msg = msg, incorrect_msg = msg)
test_object("female", undefined_msg = msg, incorrect_msg = msg)
test_output_contains("male > female", incorrect_msg = msg)
success_msg("Ufa, parece que R é neutro nessa briga? Ou talvez só queira ficar longe de problemas ;-).")
```
--- type:NormalExercise xp:100 skills:1 key:9ab0928916bf84ab225713a9a1ce40d9e322c6a0
## Fatores ordenados
Desde que `"Male"` e `"Female"` são níveis de fatores desordenados (ou nominais), R retorna uma mensagem de aviso, informando a você que o operador Maior que não é significante. Como vimos anteriormente, R atribui um valor igual para os níveis de tais fatores.
Mas esse nem sempre é o caso! Algumas vezes você irá querer lidar com fatores que tem uma ordenação natual entre suas categorias. Se este é o caso, nós devemos ter certeza que passamos estas informações para R...
Vamos supor que você está liderando um time de pesquisa de cinco analistas de dados e que você quer avaliar seu desempenho. Para fazer isso, você avalia a velocidade deles e avalia cada analista como `"slow"` (devagar), `"fast"` (rápido) ou `"insane"` (insano), além de salvar os resultados em `speed_vector`.
*** =instructions
Nesta primeira etapa, armazene em `speed_vector` um vetor com cinco entradas, uma para cada analista. Cada entrada deve conter `"slow"`, `"fast"`, ou `"insane"`. Use a lista abaixo:
- Analista 1 é fast,
- Analista 2 é slow,
- Analista 3 é slow,
- Analista 4 é fast e o
- Analista 5 é insane.
Não há necessidade de especificar esses fatores ainda.
*** =hint
Armazene em `speed_vector` um vetor contendo caracteres string, como `"fast"`, `"slow"`, etc.
*** =pre_exercise_code
```{r}
# no pec
```
*** =sample_code
```{r}
# Crie speed_vector
speed_vector <-
```
*** =solution
```{r}
# Crie speed_vector
speed_vector <- c("fast", "slow", "slow", "fast", "insane")
```
*** =sct
```{r}
test_object("speed_vector",
incorrect_msg = "`speed_vector` deve ser um vetor com 5 entradas, uma para cada velocidade de analista avaliado. Não use letras maiúsculas; R é case sensitive!")
success_msg("Bom trabalho! Continue para o próximo exercício.")
```
--- type:NormalExercise xp:100 skills:1 key:279077d10248ce03d5f972939ef8576430a16683
## Fatores ordenados (2)
`speed_vector` precisa ser convertido para um fator ordinal, uma vez que suas categorias possuem uma ordem natural. Por padrão, a função [`factor()`](http://www.rdocumentation.org/packages/base/functions/factor) transforma `speed_vector` em um fator desordenado. Para criar um fator ordenado, você tem que adicionar dois argumentos adicionais: `ordered` e `levels`.
```
factor(some_vector,
ordered = TRUE,
levels = c("lev1", "lev2" ...))
```
Ao configurar o argumento `orderes` para `TRUE` na função [`factor()`](http://www.rdocumentation.org/packages/base/functions/factor), você indica que o fator é ordenado. Com o argumento `levels` você coloca os valores do fator em uma ordem correta.
*** =instructions
Crie um vetor de fatores ordenados a partir de `speed_vector` chamado `factor_speed_vector`. Coloque `ordered` para `TRUE` e informe os valores no argumento `levels` como `c("slow", "fast", "insane")`.
*** =hint
Use a função [`factor()`](http://www.rdocumentation.org/packages/base/functions/factor) para criar `factor_speed_vector` baseado em `speed_character_vector`. O argumento `ordered` deve ser colocado como `TRUE`, visto que há uma ordem natural. Além disso, informe `levels = c("slow", "fast", "insane")`.
*** =pre_exercise_code
```{r}
# no pec
```
*** =sample_code
```{r}
# Crie speed_vector
speed_vector <- c("fast", "slow", "slow", "fast", "insane")
# Converta speed_vector para um vetor de fatores ordenados
factor_speed_vector <-
# Exiba factor_speed_vector
factor_speed_vector
summary(factor_speed_vector)
```
*** =solution
```{r}
# Crie speed_vector
speed_vector <- c("fast", "slow", "slow", "fast", "insane")
# Converta speed_vector para um vetor de fatores ordenados
factor_speed_vector <- factor(speed_vector, ordered = TRUE, levels = c("slow", "fast", "insane"))
# Exiba factor_speed_vector
factor_speed_vector
summary(factor_speed_vector)
```
*** =sct
```{r}
msg = "Não altere nada no comando que define a variável `speed_vector`."
test_object("speed_vector", undefined_msg = msg, incorrect_msg = msg)
test_function("factor", args = c("x", "ordered", "levels"),
incorrect_msg = c("O primeiro argumento a ser passado em `factor()` deve ser `speed_vector`.",
"Tenha certeza de configurar `ordered = TRUE` dentro da função `factor()`.",
"Tenha certeza de configurar `levels = c(\"slow\", \"fast\", \"insane\")` dentro da função`factor()`."))
test_object("factor_speed_vector", eq_condition = "equal",
incorrect_msg = "Tem algo errado com `factor_speed_vector`; tenha certeza de passar apenas `speed_vector`, `ordered = TRUE` e `levels = c(\"slow\", \"fast\", \"insane\")` como argumentos em `factor()`.")
success_msg("Sucesso! Dê uma boa olhada no console. Isso significa que, a partir de agora, os níveis informados no fator estão ordenados, com o sinal de `<`. Continue para o próximo exercício.")
```
--- type:NormalExercise xp:100 skills:1 key:db16e69805625bcfde227743a8cbc985f8482a37
## Comparando fatores ordenados
Ao ter um dia ruim no trabalho, o `Analista de Dados 2` entra no escritório e começa a reclamar que o `Analista de Dados 5` está atrasando todo o projeto. Você sabe que o `Analista de Dados 2' tem fama de espertinho, e decide checar se essa afirmação é verdadeira.
Agora que `factor_speed_vector` está ordenado, nos é possível comparar diferentes elementos (os Analistas de Dados, neste caso). Você pode fazer isso utilizando alguns operadores bem conhecidos. Consegue adivinhar qual?
*** =instructions
- Use `[2]` para selecionar os valores do fator para o segundo Analista de Dados em `factor_speed_vector`. Armazene o resultado em `da2`.
- Use `[5]` em `factor_speed_vector` para selecionar os valores do quinto Analista de Dados. Armazene o resultado em `da5`.
- Verifique se `da2` é maior que `da5`; simplesmente exiba o resultado. Lembre-se de que você pode usar o operador `>` para saber qual elemento é maior que o outro.
*** =hint
- Para selecionar o valor do terceiro Analista de Dados no fator, você deve usar `factor_speed_vector[3]`.
- Para comparar dois valores, você pode usar `>`. Por exemplo: `da3 > da4`.
*** =pre_exercise_code
```{r}
# no pec
```
*** =sample_code
```{r}
# Crie factor_speed_vector
speed_vector <- c("fast", "slow", "slow", "fast", "insane")
factor_speed_vector <- factor(speed_vector, ordered = TRUE, levels = c("slow", "fast", "insane"))
# Valor no fator para o segundo Analista de Dados
da2 <-
# Valor no fator para o quinto Analista de Dados
da5 <-
# O Analista de Dados 2 é mais rápido que o Analista de Dados 5?
```
*** =solution
```{r}
# Crie factor_speed_vector
speed_vector <- c("fast", "slow", "slow", "fast", "insane")
factor_speed_vector <- factor(speed_vector, ordered = TRUE, levels = c("slow", "fast", "insane"))
# Valor no fator para o segundo Analista de Dados
da2 <- factor_speed_vector[2]
# Valor no fator para o quinto Analista de Dados
da5 <- factor_speed_vector[5]
# O Analista de Dados 2 é mais rápido que o Analista de Dados 5?
da2 > da5
```
*** =sct
```{r}
msg = "Não altere o comando que declara `speed_vector` e `factor_speed_vector`!"
test_object("speed_vector", undefined_msg = msg, incorrect_msg = msg)
test_object("factor_speed_vector", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
msg <- "Você selecionou o valor correto no fator para o Analista de Dados %s? Você pode usar `factor_speed_vector[%s]`."
test_object("da2", eq_condition = "equal", incorrect_msg = sprintf(msg, "second", "2"))
test_object("da5", eq_condition = "equal", incorrect_msg = sprintf(msg, "fifth", "5"))
test_output_contains("da2 > da5", incorrect_msg = "Você comparou `da2` and `da5`? Use o operador `>` e exiba o resultado no console.")
success_msg("Parabéns! O que o resultado diz a você? O Analista de Dados 2 está reclamando sobre o Analista de Dados 5, mas é ele ou ela quem está atrasando tudo! Essa lição conclui o capítulo de fatores. Com este conhecimento básico de vetores, matrizes e fatores, você está pronto para mergulhar no maravilhoso mundo dos data frames, uma estrutura de dados muito importante em R! Vamos lá?")
```