-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathParte4_EstructurasControl.R
175 lines (146 loc) · 4.77 KB
/
Parte4_EstructurasControl.R
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
#Taller: R desde cero - Parte 4: Estructuras de control
#Autor: Denisse Fierro Arcos
#Fecha: 2020-10-24
#Detalles: En este script veremos estructuras de control: bucles (for, while)
# Bibliotecas -------------------------------------------------------------
#Llamamos a bibliotecas relevantes para este taller
library(tidyverse)
# Accediendo a subconjunto de datos ---------------------------------------
#Primero vamos a acceder a datos de Partidos de las Copas del Mundo de Fútbol
#(1930 a 2018) disponibles en Datos de Miercoles. Mas informacion aqui:
#https://github.com/cienciadedatos/datos-de-miercoles/tree/master/datos/2019/2019-04-10
#Aqui le damos el vinculo donde los datos estan guardados y a traves de delim le
#decimos que el delimitador utilizado en esta base de datos en un tab
df <- read_delim("https://bit.ly/31wcrt9", delim = "\t") %>%
#Aqui especificamos que queremos que sea guardado como un data frame
data.frame()
TotalPartidos <- subset(df, subset = anio >= 2010 &
(equipo_1 == "Brasil" | equipo_2 == "Brasil"),
select = c(anio:ciudad, fecha:equipo_2))
# If, else (Si, de otra manera) -------------------------------------------
#Queremos utilizar la clasificacion muy bueno, bueno y malo a los
#equipos de futbol basados en el numero de veces que han jugado en un mundial
#Definimos que malo es un equipo que solo aparece tres veces o menos, bueno si aparece
#hasta 15 veces y muy bueno si aparece mas de 15 veces
if(nrow(TotalPartidos) <= 3){
print("Malo")
}else if(nrow(TotalPartidos) > 3 & nrow(TotalPartidos) <= 15){
print("Bueno")
}else{
print("Muy bueno")
}
#Aplicando if else en vectores
if(df$equipo_1_final == 0){
print("Malo")
}else if(df$equipo_1_final !=0){
print("Bueno")
}
#No nos da el resultado esperado
#Podemos intentar utilizar ifelse()
ifelse(test = df$equipo_1_final == 0, yes = "Malo", no = "Bueno")
# Bucles con For ----------------------------------------------------------
#Ejemplo simple
Vec <- c(10:20)
Vec
length(Vec)
#Para programar nuestro bucle necesitamos un contador, lo llamaremos i
for(i in Vec){
print(i)
}
for(i in 1:10){
print(i)
}
for(i in 1:length(Vec)){
print(i)
}
#Podemos agregar mas operaciones
for(i in Vec){
j <- i*2
print(j)
}
#Puedo guardar los resultados en un vector
#Creemos un vector vacio
NuevoVec <- vector()
#Ahora corramos el mismo bucle, pero con unos ligeros cambios
for(i in 1:10){
#El i provee el indice del elemento dentro del vector
NuevoVec[i] <- i*2
}
NuevoVec
#Podemos tambien hacer guardar resultados en un data frame
#Supongamos que queremos crear una columna llamada ID para identificar las filas
#de nuestro data frame TotalPartidos
for(i in 1:nrow(TotalPartidos)){
TotalPartidos$ID[i] <- i
}
head(TotalPartidos)
# Bucles con while --------------------------------------------------------
#Queremos imprimir los equipos que se enfrenran en las 5 primeras filas de nuestro
#data frame TotalPartidos
#Primero creamos un contador
i <- 10
#Ahora creamos nuestro bucle
while(i <= 50){
print(df[i,c("equipo_1", 'equipo_2')])
i <- i+10
}
# Bucles con break y next -------------------------------------------------
#Equivalente a lo que intentamos anteriormente
for(i in 3:length(TotalPartidos$anio)){
if(i > 5){
break
} else{print(TotalPartidos[i,c("equipo_1", 'equipo_2')])
}}
#Queremos correr un bucle si nuestro contador es mayor a 10, pero queremos pararlo
#si es igual a 15
i <- nrow(TotalPartidos)
while(i > 10){
print(TotalPartidos[i,])
if(i == 15){
break
}
print(TotalPartidos[i,])
i <- i-1
}
#Queremos correr el bucle solo si el contador es un numero par
#Podemos identificar un numero par utilizando %%. Esto nos dara el resto de la division
#Por ej., el resto de 10 dividido para dos es 0. Esto se representa
500%%2
#Ahora revisemos el resto de 11/2
1071%%2
#Los numeros pares siempre tendran 0 como resto cuando son dividos para dos
#Ahora armemos el bucle
for(i in 1:length(TotalPartidos$anio)){
#Si la condicion que es si el resto del numero divido para dos NO es cero, debemos
#saltar este paso (next)
if(i%%2 != 0){
next
}
#Si la condicion no se cumple entonces la operacion abajo se realiza
print(TotalPartidos[i,])
}
#Podemos juntar while y next Por ej, quiero imprimir las 5 primeras filas, pero
#solo si su ID es impar
for(i in TotalPartidos$ID){
#Si el ID es par entonces seguir al siguiente paso
if(i%%2 == 0){
next
}
#Si el ID es mayor a 5 romper
if(i > 5){
break
}
#En cualquier otro caso imprimir
print(TotalPartidos[i,])
}
# Bucles con repeat -------------------------------------------------------
#Si nuevamente queremos solamente mostrar el contenido de las cinco primeras filas de
#nuestro data frame
i <- 1
repeat{
print(TotalPartidos[i,])
i <- i+1
if(i > 5){
break
}
}