-
Notifications
You must be signed in to change notification settings - Fork 8
/
chapter2.Rmd
1217 lines (917 loc) · 47.3 KB
/
chapter2.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
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
---
title_meta : Capítulo 2
title : Vectores
description : Vamos a ir a Las Vegas! donde aprenderemos como analizar los resultados de los juegos usando vectores en R! Después de completar este capítulo serás capaz de crear vectores en R, nombrarlos, seleccionar elementos de ellos y comparar diferentes vectores.
--- type:NormalExercise xp:100 key:9674d73d9c
## Creando vectores
Te sientes de suerte?
Eso espero, porque en este capítulo vamos de viaje a la Ciudad del Pecado, también conocida como el *"Paraíso del estadístico"* ;-).
Gracias a R y a tus nuevas habilidades analíticas, vas a aprender cómo mejorar tus ganancias en el casino y empezar una lucrativa carrera como jugador profesional. En este capítulo veremos cómo puedes fácilmente llevar la cuenta de tus apuestas y como hacer análisis simples de tus jugadas. Próxima parada... Viva las Vegas!!!
*** =instructions
- Esperamos que recuerdes lo que aprendiste en el capítulo anterior. Asigna el valor `"Alla vamos!"` a la variable `Vegas`
*** =hint
Solo escribe lo siguiente en el editor:
```
Vegas <- "Alla vamos!"
```
Ten en cuenta que R distingue las mayúsculas de las minúsculas.
*** =pre_exercise_code
```{r eval=FALSE}
# no pec
```
*** =sample_code
```{r eval=FALSE}
# Define la variable Vegas
```
*** =solution
```{r eval=FALSE}
# Define the variable Vegas
Vegas <- "Alla vamos!"
```
*** =sct
```{r eval=FALSE}
set_language("es")
test_object("Vegas",
undefined_msg = "Asegúrate de haber definido la variable <code>Vegas</code>.",
incorrect_msg = "Asegúrate de haber asignado el valor correcto a la variable<code>Vegas</code>. Ten cuidado con las mayúsculas y minúsculas")
success_msg("Muy bien! Sigamos.")
```
*** =skills
1
--- type:NormalExercise xp:100 key:70876ac6d8
## Creando vectores (2)
Primero concentrémonos.
En nuestro camino a para quebrar al casino, haremos uso extensivo de los vectores. Un vector es un arreglo unidimensional que puede contener datos numéricos, caracteres, o valores lógicos. En otras palabras un vector es una herramienta simple para guardar un conjunto de datos del mismo tipo. Por ejemplo podemos llevar la cuenta de las ganancias y pérdidas en los juegos de casino.
En R, se crea un vector con la función [`c()`](http://www.rdocumentation.org/packages/base/functions/c). La función se llama c por "combinar". Se ponen los valores o elementos del vector dentro de paréntesis, separados por coma. Por ejemplo:
```
vector_numerico <- c(1, 2, 3)
vector_caracter <- c("a", "b", "c")
vector_logico <- c(TRUE, FALSE)
```
Una vez has creado estos vectores en R puedes usarlos para hacer cálculos.
*** =instructions
Completa el código de tal manera que el `vector_logico` contenga tres elementos: `TRUE`, `FALSE` y `TRUE` (en ese orden).
*** =hint
Asigna `c(TRUE,FALSE,TRUE)` a la variable `vector_logico` con el operador `<-`. Puedes utilizar las notaciones cortas `T` y `F` para `TRUE` y `FALSE` pero no es recomendable.
*** =pre_exercise_code
```{r eval=FALSE}
# no pec
```
*** =sample_code
```{r eval=FALSE}
vector_numerico <- c(1, 10, 49)
vector_caracter <- c("a", "b", "c")
# Completa el código para vector_logico
vector_logico <-
```
*** =solution
```{r eval=FALSE}
vector_numerico <- c(1, 10, 49)
vector_caracter <- c("a", "b", "c")
# Completa el código para vector_logico
vector_logico <- c(TRUE, FALSE, TRUE)
```
*** =sct
```{r eval=FALSE}
set_language("es")
test_object("vector_numerico")
test_object("vector_caracter")
test_object("vector_logico",
undefined_msg = "Asegúrate de definir la variable <code>vector_logico</code>.",
incorrect_msg = "Asegúrate de haber asignado los valores correctos a <code>vector_logico</code>. El orden es importante!")
success_msg("Perfecto! notemos que agregar espacios después de las comas ayuda a que el código sea mas legible. Practiquemos un poco más con los vectores.")
```
*** =skills
1
--- type:NormalExercise xp:100 key:74e329e45e
## Creando vectores (3)
Después de una semana en Las Vegas y cero Ferraris en tu garage, decides que es hora de empezar a utilizar tus super-poderes analíticos.
Antes de hacer un primer análisis, decides llevar un registro de todas tus ganancias y pérdidas de la semana pasada:
En el poker:
- Lunes: ganaste 140
- Martes: perdiste 50
- Miercoles: ganaste 20
- Jueves: perdiste 120
- Viernes: ganaste 240
En la ruleta:
- Lunes: perdiste 24
- Martes: perdiste 50
- Miercoles: ganaste 100
- Jueves: perdiste 350
- Viernes: ganaste 10
Solamente has jugado poker y ruleta, porque un grupo de adivinos se ha apoderado de la mesa de dados. Para poder utilizar esos datos en R, decides crear las variables `vector_poker` y `vector_ruleta`.
*** =instructions
Asigna las pérdidas/ganancias en la ruleta a `vector_ruleta`.
*** =hint
El editor contiene el código para crear el `vector_poker`. Asigna los valores correctos al `vector_ruleta` usando los números presentados. No olvides que usamos números negativos para las pérdidas.
*** =sample_code
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <-
```
*** =solution
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
```
*** =sct
```{r eval=FALSE}
set_language("es")
test_object("vector_poker",
undefined_msg = "Asegúrate de definir la variable <code>vector_poker</code>.",
incorrect_msg = "Asegúrate de haber asignado los valores correctos a <code>vector_poker</code>.")
test_object("vector_ruleta",
undefined_msg = "Asegúrate de definir la variable <code>vector_ruleta</code>.",
incorrect_msg = "Asegúrate de haber asignado los valores correctos a <code>vector_ruleta</code>.")
success_msg("Muy bien! revisa los contenidos en tus vectores, puedes hacerlo simplemente escribiendo el nombre de la variable en la consola y presionando enter. Sigamos, esto se pone interesante!")
```
*** =skills
1
--- type:NormalExercise xp:100 key:81e15ff44f
## Nombrando elementos
Como analista de datos, es importante tener una clara visión de que datos estas usando. Entender a qué se refiere cada elemento es por lo tanto esencial.
En el ejercicio anterior, creamos un vector con tus ganancias de la semana. Cada elemento del vector se refiere a cada día de la semana, pero es difícil decir que elemento corresponde a que día. Sería muy conveniente si pudiéramos mostrar esa información en el vector mismo.
Puedes dar nombres a los elementos de un vector con la función `names()` Mira este ejemplo:
```{r}
vector <- c("Perez", "Jugador de Poker")
names(vector) <- c("Apellido", "Profesion")
```
Este código primero crea el vector `vector` y luego le da nombres a los dos elementos. Al primer elemento `Perez` se le asigna el nombre `Apellido`, al segundo elemento le da el nombre `Profesion`. Nota que estamos asignando a `names(vector)` otro vector que contiene los nombres que deseamos dar a los elementos de `vector`. Al imprimir los contenidos del vector en la consola obtenemos:
```{r, echo = FALSE}
vector
```
*** =instructions
- Ahora asigna los días de la semana como nombres a los vectores `vector_poker` y `vector_ruleta`. Usa los nombres con mayúscula inicial y sin acentos (esto no es clase de ortografía...): Lunes, Martes, Miercoles, Jueves y Viernes.
- Imprime los vectores en la consola
*** =hint
Puedes usar `names(vector_poker)` para asignar nombres a los elementos de `vector_poker`. No olvides ni las mayúsculas ni las comillas al crear el vector de nombres:
```
c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
```
*** =pre_exercise_code
```{r eval=FALSE}
# no pec
```
*** =sample_code
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Asigna los nombres a los vectores
# Imprime los vectores en la consola
```
*** =solution
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Asigna los nombres a los vectores
names(vector_poker) <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
names(vector_ruleta) <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
# Imprime los vectores en la consola
vector_poker
vector_ruleta
```
*** =sct
```{r eval=FALSE}
set_language("es")
test_object("vector_poker",
undefined_msg = "Asegúrate de definir la variable <code>vector_poker</code>.",
incorrect_msg = "No cambies los valores dentro de <code>vector_poker</code>; ya estaban escritos para ti.")
test_object("vector_ruleta",
undefined_msg = "Asegúrate de definir la variable <code>vector_ruleta</code>.",
incorrect_msg = "No cambies los valores dentro de <code>vector_ruleta</code>; ya estaban escritos para ti")
test_object("vector_poker",
eq_condition = "equal",
incorrect_msg = "Asegúrate de haber asignado los nombres correctos a<code>vector_poker</code>.")
test_object("vector_ruleta",
eq_condition = "equal",
incorrect_msg = "Asegúrate de haber asignado los nombres correctos a <code>vector_ruleta</code>.")
test_output_contains("vector_poker", incorrect_msg = "Imprime vector_poker para que puedas ver sus contenidos, solo escribe vector_poker en el editor.")
test_output_contains("vector_ruleta", incorrect_msg = "Imprime vector_ruleta para que puedas ver sus contenidos, solo escribe vector_ruleta en el editor.")
success_msg("Bien hecho! Continuemos al siguiente ejercicio.")
```
*** =skills
1
--- type:NormalExercise xp:100 key:edfb334946
## Nombrando elementos (2)
Si quieres ser un buen estadístico, tienes que ser un poco perezoso. (Si ya eres perezoso, quizás hayas nacido con esos excepcionales talentos estadísticos.)
En los ejercicios anteriores probablemente sentiste que es aburrido escribir una y otra vez información como los días de la semana. Sin embargo, existe una manera mas eficiente de lograr esto, que tal si asignamos el vector que contiene los días de la semana a una **variable**.
Así como lo hiciste con las ganancias/pérdidas de la ruleta y el poker, puedes también crear un vector que contenga los días de la semana. Al asignarlo a una variable, éste puede ser reusado.
*** =instructions
- Crea la variable `vector_dias` que contenga un vector con los días de la semana, de Lunes a Viernes.
- Usa la variable `vector_dias` para asignar nombres a los elementos de `vector_poker` y `vector_ruleta`.
*** =hint
Puedes usar `names(vector_poker)` para asignar nombres a los elementos de `vector_poker`. No olvides los parentesis al crear el vector `vector_dias`.
*** =pre_exercise_code
```{r eval=FALSE}
# no pec
```
*** =sample_code
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Crea la variable vector_dias
vector_dias <-
# Asigna los nombres a los elementos de vector_poker y vector_ruleta
names(vector_poker) <-
names(vector_ruleta) <-
```
*** =solution
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Crea la variable vector_dias
vector_dias <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
# Asigna los nombres a los elementos de vector_poker y vector_ruleta
names(vector_poker) <- vector_dias
names(vector_ruleta) <- vector_dias
```
*** =sct
```{r eval=FALSE}
set_language("es")
test_object("vector_poker",
undefined_msg = "Asegúrate de definir la variable <code>vector_poker</code>.",
incorrect_msg = "No cambies los valores de <code>vector_poker</code>; ya fueron escritos para ti")
test_object("vector_ruleta",
undefined_msg = "Asegúrate de definir la variable <code>vector_ruleta</code>.",
incorrect_msg = "No cambies los valores de <code>vector_ruleta</code>; ya fueron escritos para ti")
test_object("vector_dias",
undefined_msg = "Asegúrate de definir la variable <code>vector_dias</code>.",
incorrect_msg = "Asegúrate de asignar los valores correctos a <code>vector_dias</code>.")
test_object("vector_poker",
eq_condition = "equal",
incorrect_msg = "Asegúrate de asignar los valores de <code>vector_dias</code> como nombres de <code>vector_poker</code>.")
test_object("vector_ruleta",
eq_condition = "equal",
incorrect_msg = "Asegúrate de asignar los valores de <code>vector_dias</code> como nombres de <code>vector_ruleta</code>.")
success_msg("Bien hecho! Un consejo de programación: trata de evitar duplicar el código que ya has escrito, eso te harà mucho màs productivo. Continuemos para ver cómo hacer aritmética con vectores!")
```
*** =skills
1
--- type:NormalExercise xp:100 key:121375f169
## Calculando las ganancias totales
Ahora que tienes los resultados del poker y la ruleta en un vector con elementos apropiadamente nombrados, puedes empezar a hacer análisis.
Veremos como encontrar la siguiente información:
- La ganancia/pérdida total por cada día de la semana.
- La ganancia/pérdida total en la semana.
- Sabremos si estas ganando o perdiendo dinero en el poker y en la ruleta.
Para saber lo que nos proponemos tenemos que hacer cálculos aritméticos con los vectores. Cuando sumamos dos vectores en R, éste hace la suma elemento por elemento, por ejemplo las siguientes líneas de código son completamente equivalentes:
```
c(1, 2, 3) + c(4, 5, 6)
c(1 + 4, 2 + 5, 3 + 6)
c(5, 7, 9)
```
Primero experimentemos sumando!
*** =instructions
- Toma la suma de las variables `vector_A` y `vector_B` y asígnala a `vector_total`.
- Mira el resultado imprimiendo el valor de `vector_total` en la consola.
*** =hint
Usa el operador `+` para sumar `vector_A` y `vector_B`. Usa `<-` para asignar el resultado a `vector_total`.
*** =pre_exercise_code
```{r eval=FALSE}
# no pec
```
*** =sample_code
```{r eval=FALSE}
vector_A <- c(1, 2, 3)
vector_B <- c(4, 5, 6)
# Asigna la suma de vector_A y vector_B
vector_total <-
# Imprime el vector_total a la consola
vector_total
```
*** =solution
```{r eval=FALSE}
vector_A <- c(1, 2, 3)
vector_B <- c(4, 5, 6)
# Asigna la suma de vector_A y vector_B
vector_total <- vector_A + vector_B
# Imprime el vector_total a la consola
vector_total
```
*** =sct
```{r eval=FALSE}
set_language("es")
test_object("vector_A")
test_object("vector_B")
test_object("vector_total",
undefined_msg = "Asegúrate de definir la variable <code>vector_total</code>.",
incorrect_msg = "Asegúrate de que <code>vector_total</code> contiene la suma de <code>vector_A</code> y <code>vector_B</code>.")
success_msg("Buen trabajo! Continuemos.")
```
*** =skills
1
--- type:NormalExercise xp:100 key:2b468bdaa1
## Calculando las ganancias totales (2)
¿Entendiste como R realiza aritmética con los vectores?
Ya es hora de tener uno de esos Ferraris en el garage! Primero, hay que saber cuál fue la ganancia/pérdida por cada día. La ganancia neta de cada día es la suma de las ganancias/pérdidas que hiciste en el poker y en la ruleta.
En R, este cálculo es simplemente la suma de `vector_ruleta` y `vector_poker`.
*** =instructions
- Asigna a la variable `total_diario` lo que ganaste/perdiste cada día en total (poker y ruleta combinado).
- Nombra los elementos de `total_diario` utilizando `vector_dias`.
- Imprime `total_diario` en la consola para que puedas ver tus resultados totales en cada día de la semana. Cuáles fueron los días buenos y los días malos?
*** =hint
Justo como en el ejercicio anterior, asigna la suma de los vectores a `total_diario`.
*** =pre_exercise_code
```{r eval=FALSE}
# no pec
```
*** =sample_code
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Dando nombres a vector_poker y vector_ruleta
vector_dias <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
names(vector_poker) <- vector_dias
names(vector_ruleta) <- vector_dias
# Calculando las ganancias/pérdidas diarias:
total_diario <-
# Dando nombres a total_diario
names(total_diario) <-
# Imprime total_diario a la consola para ver tus resultados por día
```
*** =solution
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Dando nombres a vector_poker y vector_ruleta
vector_dias <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
names(vector_poker) <- vector_dias
names(vector_ruleta) <- vector_dias
# Calculando las ganancias/pérdidas diarias:
total_diario <- vector_poker + vector_ruleta
# Dando nombres a total_diario
names(total_diario) <- vector_dias
# Imprime total_diario a la consolo para ver tus resultados por día
total_diario
```
*** =sct
```{r eval=FALSE}
set_language("es")
msg = "No cambies los valores o nombres de <code>vector_poker</code> y <code>vector_ruleta</code>."
test_object("vector_dias", undefined_msg = msg, incorrect_msg = msg)
test_object("vector_poker", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_object("vector_ruleta", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_object("total_diario", eq_condition = "equal",
incorrect_msg = "Asegúrate de asignar la suma de <code>vector_poker</code> y <code>vector_ruleta</code> a <code>total_diario</code>. También tienes que nombrar los elementos de <code>total_diario</code> usando <code>vector_dias</code>.")
test_output_contains("total_diario", incorrect_msg = "Imprime <code>total_diario</code> para que puedas ver sus contenidos, solo escribe <code>total_diario</code> en el editor.")
success_msg("Bien! Vamos al siguiente ejercicio.")
```
*** =skills
1
--- type:NormalExercise xp:100 key:9ab41c0ec1
## Calculando ganancias totales (3)
Basado en los análisis previos, parece que tuviste una mezcla de días buenos y malos. Esto no era lo que tu ego esperaba, y te preguntas si quizás hay una (muy pequeña) posibilidad de que hayas perdido dinero en la semana.
La función que nos ayudará a contestar esta pregunta es [`sum()`](http://www.rdocumentation.org/packages/base/functions/sum). Ésta función calcula la suma de todos los elementos de un vector. Por ejemplo para calcular (y asignar a una variable) el monto total de dinero que has ganado/perdido en el poker en la semana, escribe:
```
total_poker <- sum(vector_poker)
```
*** =instructions
- Calcula el monto total de dinero que has ganado/perdido en la ruleta, asígnalo a la variable `total_ruleta`.
- Ahora que tienes los totales para la ruleta y el poker, puedes fácilmente calcular el valor de `total_semana`, que es la suma de todas las ganancias y pérdidas en la semana.
- Imprime el valor de `total_semana` a la consola. ¿En total ganaste o perdiste en la semana?
*** =hint
Usa la función `sum` para obtener el total de `vector_ruleta`. `total_semana` debe de ser la suma de `vector_ruleta` y `vector_poker`.
*** =pre_exercise_code
```{r eval=FALSE}
# no pec
```
*** =sample_code
```{r eval=FALSE}
# Resultados en la mesa de Poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Dando nombres a vector_poker y vector_ruleta
vector_dias <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
names(vector_poker) <- vector_dias
names(vector_ruleta) <- vector_dias
# Ganancias totales en el poker
total_poker <- sum(vector_poker)
# Ahora completa el código:
total_ruleta <-
total_semana <-
#Imprime el total que ganaste/perdiste en la semana
```
*** =solution
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Dando nombres a vector_poker y vector_ruleta
vector_dias <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
names(vector_poker) <- vector_dias
names(vector_ruleta) <- vector_dias
# Ganancias totales en el poker
total_poker <- sum(vector_poker)
# Ahora completa el código:
total_ruleta <- sum(vector_ruleta)
total_semana <- total_ruleta + total_poker
#Imprime el total que ganaste/perdiste en la semana
total_semana
```
*** =sct
```{r eval=FALSE}
set_language("es")
msg = "No cambies los valores o nombres de <code>vector_poker</code> y <code>vector_ruleta</code>."
test_object("vector_dias", undefined_msg = msg, incorrect_msg = msg)
test_object("vector_poker", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_object("vector_ruleta", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_object("total_poker",
undefined_msg = "Asegúrate de definir la variable <code>total_poker</code>.",
incorrect_msg = "Asegúrate de asignar a <code>total_poker</code> la suma de <code>vector_poker</code>.")
test_object("total_ruleta",
undefined_msg = "Asegúrate de definir la variable <code>total_ruleta</code>.",
incorrect_msg = "Asegúrate de asignar a <code>total_ruleta</code> la suma de <code>vector_ruleta</code>.")
test_object("total_semana",
undefined_msg = "Asegúrate de definir la variable <code>total_semana</code>.",
incorrect_msg = "Asegúrate de asignar a <code>total_semana</code> la suma de totales de los vectores.")
test_output_contains("total_semana", incorrect_msg = "Imprime <code>total_semana</code> para que puedas ver sus contenidos, solo escribe <code>total_semana</code> en el editor.")
success_msg("Bien! Eres muy bueno en R! aunque como vemos no te fue tan bien en el casino... no importa, vamos al siguiente ejercicio.")
```
*** =skills
1
--- type:NormalExercise xp:100 key:c1329e546f
## Comparando ganancias totales
Mmmmm.... parece que estás perdiendo dinero. Que sorpresa! Hora de repensar tu estrategia! Esto va a requerir un análisis más profundo.
Después de una breve lluvia de ideas en el jacuzzi del hotel, piensas que una posible explicación puede ser que tus habilidades en la ruleta no están tan bien desarrolladas como las de poker. Así que talvez tus ganancias totales en el poker son más grandes (`>`) que en la ruleta.
*** =instructions
- Calcula `total_poker` y `total_ruleta` como en el ejercicio anterior.
- Fíjate si tus ganancias totales en el poker son más altas que en la ruleta haciendo una comparación. Asigna el resultado de esta comparación a la variable `respuesta`.
¿Cuál es tu conclusión? ¿Deberías dedicarte a la ruleta o al poker?
- Imprime `respuesta` a la consola.
*** =hint
Prácticamente ya calculaste la respuesta en el ejercicio anterior. Para saber si 6 es más grande que 5, escribe `6 > 5`. Esto devuelve un valor lógico (`TRUE`) o bien `FALSE` para `6 < 5 `.
*** =pre_exercise_code
```{r eval=FALSE}
# no pec
```
*** =sample_code
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Dando nombres a vector_poker y vector_ruleta
vector_dias <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
names(vector_poker) <- vector_dias
names(vector_ruleta) <- vector_dias
# Ganancias totales en el poker y en la ruleta
total_poker <-
total_ruleta <-
# Probando si las ganancias en el poker son más altas que en la ruleta:
respuesta <-
# Imprime respuesta a la consola
```
*** =solution
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Dando nombres a vector_poker y vector_ruleta
vector_dias <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
names(vector_poker) <- vector_dias
names(vector_ruleta) <- vector_dias
# Ganancias totales en el poker y en la ruleta
total_poker <- sum(vector_poker)
total_ruleta <- sum(vector_ruleta)
# Probando si las ganancias en el poker son más altas que en la ruleta:
respuesta <- total_poker > total_ruleta
# Imprime respuesta a la consola
respuesta
```
*** =sct
```{r eval=FALSE}
set_language("es")
msg = "No cambies los valores o nombres de <code>vector_poker</code> y <code>vector_ruleta</code>."
test_object("vector_dias", undefined_msg = msg, incorrect_msg = msg)
test_object("vector_poker", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_object("vector_ruleta", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_object("total_poker",
undefined_msg = "Asegúrate de definir la variable <code>total_poker</code>.",
incorrect_msg = "Asegúrate de asignar a <code>total_poker</code> la suma de <code>vector_poker</code>.")
test_object("total_ruleta",
undefined_msg = "Asegúrate de definir la variable <code>total_ruleta</code>.",
incorrect_msg = "Asegúrate de asignar a <code>total_ruleta</code> la suma de <code>vector_ruleta</code>.")
test_object("respuesta",
undefined_msg = "Asegúrate de definir la variable <code>respuesta</code>.",
incorrect_msg = "Parece que la variable respuesta no contiene el valor correcto. Lee las instrucciones cuidadosamente")
test_output_contains("respuesta", incorrect_msg = "Imprime <code>respuesta</code> para que puedas ver sus contenidos, solo escribe <code>respuesta</code> en el editor.")
success_msg("Buen trabajo! Continúa al siguiente ejercicio.")
```
*** =skills
1
--- type:NormalExercise xp:100 key:6375c00c0d
## Seleccionando elementos: los buenos tiempos
La corazonada parece que fue cierta. Parece que te va mejor en el poker que en la ruleta.
Otro posible aspecto a investigar son tus resultados al comienzo de la semana comparados con los últimos días. Talvez te excediste en los tequilas al final de la semana...
Para responder esta pregunta, concentrémonos en solo unos elementos del `vector_total`. En otras palabras, nuestro objetivo es seleccionar elementos específicos de los vectores. Para seleccionar elementos de un vector (y luego matrices, data frames, etc.), puedes utilizar los corchetes. Entre corchetes indicamos los elementos que queremos seleccionar. Por ejemplo, para seleccionar el primer elemento de un vector, escribes `vector_poker[1]`. Para seleccionar el segundo elemento escribimos `vector_poker[2]`, etc.
*** =instructions
Asigna tu ganancia del Miércoles a la variable `poker_miercoles`
*** =hint
Miercoles es el tercer elemento del `vector_poker`, por lo tanto puede ser seleccionado así: `vector_poker[3]`.
Nota que el primer elemento tiene índice 1 no 0 como en muchos otros lenguajes de programación.
*** =pre_exercise_code
```{r eval=FALSE}
# no pec
```
*** =sample_code
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Dando nombres a vector_poker y vector_ruleta
vector_dias <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
names(vector_poker) <- vector_dias
names(vector_ruleta) <- vector_dias
# Asigna el valor de lo ganado el Miercoles en el poker
poker_miercoles <-
```
*** =solution
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Dando nombres a vector_poker y vector_ruleta
vector_dias <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
names(vector_poker) <- vector_dias
names(vector_ruleta) <- vector_dias
# Asigna el valor de lo ganado el Miercoles en el poker
poker_miercoles <- vector_poker[3]
```
*** =sct
```{r eval=FALSE}
set_language("es")
msg = "No cambies los valores o nombres de <code>vector_poker</code> y <code>vector_ruleta</code>."
test_object("vector_dias", undefined_msg = msg, incorrect_msg = msg)
test_object("vector_poker", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_object("vector_ruleta", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_object("poker_miercoles",
undefined_msg = "Asegúrate de haber definido la variable <code>poker_miercoles</code>.",
incorrect_msg = "Parece que <code>poker_miercoles</code> no contiene el valor correcto de <code>vector_poker</code>.")
success_msg("Vamos muy bien! También es posible seleccionar múltiples elementos de un vector, veamos como en el siguiente ejercicio!")
```
*** =skills
1
--- type:NormalExercise xp:100 key:05c342af5b
## Seleccionando elementos: los buenos tiempos (2)
¿Qué tal si analizamos los resultados en los días medios de la semana?
Para seleccionar múltiples elementos de un vector, puedes hacerlo usando corchetes. En el ejercicio anterior pusimos un número, llamado **índice**, entre los corchetes y obtuvimos el elemento del vector correspondiente a ese índice. Para seleccionar varios elementos podemos utilizar otro vector cuyos elementos son los índices que deseamos seleccionar. Por ejemplo, para seleccionar el primero y el quinto elemento usamos el vector `c(1,5)` dentro de los corchetes. El siguiente código selecciona el primero y quinto elementos de `vector_poker`:
```
vector_poker[c(1,5)]
```
*** =instructions
- Asigna los resultados de obtenidos del poker de los días Martes, Miercoles y Jueves a la variable `dias_medios_poker`.
- Imprime el vector `dias_medios_poker` a la consola para ver sus elementos.
*** =hint
Usa el vector `c(2,3,4)` entre corchetes para seleccionar los elementos deseados `vector_poker`.
*** =pre_exercise_code
```{r eval=FALSE}
# no pec
```
*** =sample_code
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Dando nombres a vector_poker y vector_ruleta
vector_dias <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
names(vector_poker) <- vector_dias
names(vector_ruleta) <- vector_dias
# Define la nueva variable:
dias_medios_poker <-
# Imprime dias_medios_poker
```
*** =solution
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Dando nombres a vector_poker y vector_ruleta
vector_dias <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
names(vector_poker) <- vector_dias
names(vector_ruleta) <- vector_dias
# Define la nueva variable:
dias_medios_poker <- vector_poker[c(2, 3, 4)]
# Imprime dias_medios_poker
dias_medios_poker
```
*** =sct
```{r eval=FALSE}
set_language("es")
msg = "No cambies los valores o nombres de <code>vector_poker</code> y <code>vector_ruleta</code>."
test_object("vector_dias", undefined_msg = msg, incorrect_msg = msg)
test_object("vector_poker", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_object("vector_ruleta", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_object("dias_medios_poker",
undefined_msg = "Asegúrate de definir la variable <code>dias_medios_poker</code>.",
incorrect_msg = "Parece que <code>dias_medios_poker</code> no contiene los valores correctos de <code>vector_poker</code>.")
test_output_contains("dias_medios_poker", incorrect_msg = "Imprime <code>dias_medios_poker</code> para que puedas ver sus contenidos, solo escribe <code>dias_medios_poker</code> en el editor.")
success_msg("Bien hecho! Seleccionar elementos es de las operaciones màs importantes en R, y hemos aprendiendo mucho, pero falta màs aun");
```
*** =skills
1
--- type:NormalExercise xp:100 key:073de542e2
## Seleccionando elementos: los buenos tiempos (3)
Seleccionar varios elementos del `vector_poker` con `c(2,3,4)` quizás no sea muy conveniente. Recordemos como estadísticos nuestras raíces perezosas, así que usemos una notación que R utiliza para crear vectores de números consecutivos `c(2,3,4)` se puede crear con el código `2:4`, que genera el vector que contiene los números naturales del 2 al 4 (incluyendo ambos extremos).
Así que ahora tenemos otra manera de seleccionar los elementos que corresponden a los días medios de la semana: `vector_poker[2:4]`.
Quizás en este ejemplo no haya mucha diferencia entre `c(2,3,4)` y `2:4` pero imagina que tuviéramos que extraer los primeros 80 elementos consecutivos de un vector, con la primera notación tendríamos que escribir todos los números del 1 al 80, sin embargo ahora sabemos que podemos hacerlo así de simple: `1:80`.
*** =instructions
- Asigna los resultados del Martes al Viernes del `vector_ruleta` a la variable `martes_a_viernes_ruleta`. Utiliza la notación de dos puntos`:`.
- Imprime `martes_a_viernes_ruleta` en la consola.
*** =hint
Asigna los elementos de `vector_ruleta` solicitados a `vector_ruleta` usando `2:5` entre corchetes.
*** =sample_code
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Dando nombres a vector_poker y vector_ruleta
vector_dias <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
names(vector_poker) <- vector_dias
names(vector_ruleta) <- vector_dias
# Define la nueva variable siguiendo las instrucciones
martes_a_viernes_ruleta <-
#Imprime martes_a_viernes_ruleta en la consola
```
*** =solution
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Dando nombres a vector_poker y vector_ruleta
vector_dias <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
names(vector_poker) <- vector_dias
names(vector_ruleta) <- vector_dias
# Define la nueva variable siguiendo las instrucciones
martes_a_viernes_ruleta <- vector_ruleta[2:5]
#Imprime martes_a_viernes_ruleta en la consola
martes_a_viernes_ruleta
```
*** =sct
```{r eval=FALSE}
set_language("es")
msg = "No cambies los valores o nombres de <code>vector_poker</code> y <code>vector_ruleta</code>."
test_object("vector_dias", undefined_msg = msg, incorrect_msg = msg)
test_object("vector_poker", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_object("vector_ruleta", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_object("martes_a_viernes_ruleta",
undefined_msg = "Asegúrate de haber definido <code>martes_a_viernes_ruleta</code>.",
incorrect_msg = "Parece que <code>martes_a_viernes_ruleta</code> no contiene los valores correctos de <code>vector_ruleta</code>. Verifica que utilizaste los índices correctos.")
test_output_contains("martes_a_viernes_ruleta", incorrect_msg = "Imprime <code>martes_a_viernes_ruleta</code> para que puedas ver sus contenidos, solo escribe <code>martes_a_viernes_ruleta</code> en el editor.")
success_msg("Fantàstico! El operados dos puntos es muy útil y se usa mucho en R. Así que recuérdalo bien. Vamos al siguiente ejercicio")
```
*** =skills
1
--- type:NormalExercise xp:100 key:7da15e2b32
## Seleccionando elementos: los buenos tiempos (4)
Otra forma de abordar este problema es usar los nombres de los elementos (Lunes, Martes, etc.) en lugar de sus índices. Por ejemplo:
```
vector_poker["Lunes"]
```
Seleccionará el primer elemento de `vector_poker` porque el primer elemento es el que tiene el nombre "Lunes". De la misma manera en que lo hicimos en el ejercicio anterior, puedes utilizar un vector que tenga los nombres de los elementos que deseas extraer:
```
vector_poker[c("Lunes","Martes")]
```
*** =instructions
Calcula tus ganancias promedio durante los primeros tres días de la semana seleccionando los elementos por nombre. Asigna este valor a `promedio_primeros3_dias`. Puedes usar la función [`mean()`](http://www.rdocumentation.org/packages/base/functions/mean) para obtener el promedio de los elementos de un vector.
*** =hint
Si usas `mean(vector_poker)` vas a obtener el promedio de todos los días. Pero recuerda que solo nos interesa el promedio de los primeros tres días.
*** =pre_exercise_code
```{r eval=FALSE}
# no pec
```
*** =sample_code
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Dando nombres a vector_poker y vector_ruleta
vector_dias <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
names(vector_poker) <- vector_dias
names(vector_ruleta) <- vector_dias
promedio_primeros3_dias <-
```
*** =solution
```{r eval=FALSE}
# Resultados en la mesa de poker en la semana
vector_poker <- c(140, -50, 20, -120, 240)
# Resultados en la ruleta en la semana
vector_ruleta <- c(-24, -50, 100, -350, 10)
# Dando nombres a vector_poker y vector_ruleta
vector_dias <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
names(vector_poker) <- vector_dias
names(vector_ruleta) <- vector_dias
promedio_primeros3_dias <- mean(vector_poker[c("Lunes", "Martes", "Miercoles")])
```
*** =sct
```{r eval=FALSE}
set_language("es")
msg = "No cambies los valores o nombres de <code>vector_poker</code> y <code>vector_ruleta</code>."
test_object("vector_dias", undefined_msg = msg, incorrect_msg = msg)
test_object("vector_poker", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_object("vector_ruleta", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg)
test_object("promedio_primeros3_dias",
undefined_msg = "Asegúrate de definir la variable <code>promedio_primeros3_dias</code>.",
incorrect_msg = "Parece que <code>promedio_primeros3_dias</code> no tiene el valor correcto, intenta de nuevo.")
success_msg("Buen trabajo! Aparte de seleccionar elementos por índice y por nombre también lo puedes hacer por comparación. En los siguientes ejercicios veremos como.");
```
*** =skills
1
--- type:NormalExercise xp:100 key:07424a76c0
## Selección por comparación - Paso 1
Al utilizar los operadores de comparación, podemos abordar las preguntas anteriores de una manera más interesante.
Los operadores de comparación en R son los siguientes:
- `<` menor que
- `>` mayor que
- `>=` mayor o igual que
- `==` igualdad