#Ejercicios
Resolver la siguiente ecuacion: \(x^2+x-1=0\)
#ax^2+bx+c
a <- 1
b <- 1
c <- -1
x1 <- (-1*b+sqrt(b^2-4*a*c))/(2*a)
x2 <- (-1*b-sqrt(b^2-4*a*c))/(2*a)
Resolver la siguiente ecuacion: \(2x^2-x-4=0\)
a <- 2
b <- -1
c <- -4
x3 <- (-1*b+sqrt(b^2-4*a*c))/(2*a)
x4 <- (-1*b-sqrt(b^2-4*a*c))/(2*a)
Clacular: log base 4 de 1024.
log(1024)/log(4)
## [1] 5
Instalar el paquete “dslabs” y analizar el movielens.
#
library(dslabs)
## Warning: package 'dslabs' was built under R version 4.1.3
data1 <- movielens
str(data1)
## 'data.frame': 100004 obs. of 7 variables:
## $ movieId : int 31 1029 1061 1129 1172 1263 1287 1293 1339 1343 ...
## $ title : chr "Dangerous Minds" "Dumbo" "Sleepers" "Escape from New York" ...
## $ year : int 1995 1941 1996 1981 1989 1978 1959 1982 1992 1991 ...
## $ genres : Factor w/ 901 levels "(no genres listed)",..: 762 510 899 120 762 836 81 762 844 899 ...
## $ userId : int 1 1 1 1 1 1 1 1 1 1 ...
## $ rating : num 2.5 3 3 2 4 2 2 2 3.5 2 ...
## $ timestamp: int 1260759144 1260759179 1260759182 1260759185 1260759205 1260759151 1260759187 1260759148 1260759125 1260759131 ...
#Clase2
# Asignacion de elemenetos
x <- 2
x <- 3*x
# Para borrar las variables u objetos usamos la funcion rm("objeto")
rm(a)
rm(b)
vector1 <- 3
is.vector(vector1)
## [1] TRUE
# vectores de dim mayor a 1
x <- c(11,12,13,14)
x
## [1] 11 12 13 14
is.vector(x)
## [1] TRUE
z <- c("a","b","c")
z
## [1] "a" "b" "c"
y <- c(x,21,31,x) #se puede unir un vector a otro
y
## [1] 11 12 13 14 21 31 11 12 13 14
#repeticion de elementos
rep(z,times=5)
## [1] "a" "b" "c" "a" "b" "c" "a" "b" "c" "a" "b" "c" "a" "b" "c"
rep(z,each=5)
## [1] "a" "a" "a" "a" "a" "b" "b" "b" "b" "b" "c" "c" "c" "c" "c"
x
## [1] 11 12 13 14
y
## [1] 11 12 13 14 21 31 11 12 13 14
x+y
## Warning in x + y: longitud de objeto mayor no es múltiplo de la longitud de uno
## menor
## [1] 22 24 26 28 32 43 24 26 24 26
v2 <- c(380,124,818)
v3 <- c("Italia","Canada","Egipto")
v2
## [1] 380 124 818
v3
## [1] "Italia" "Canada" "Egipto"
b1 <- c(Italia=380,Canada=124, Egipto=818)
b1
## Italia Canada Egipto
## 380 124 818
#Para renombrar los nombres de las variables
paises <- c("IT","CA","EG")
names(b1) <- paises
b1
## IT CA EG
## 380 124 818
v2
## [1] 380 124 818
v2[3]
## [1] 818
v2[1:2]
## [1] 380 124
v2[c(1,3)]
## [1] 380 818
x <- c(1,"canada",3)
x
## [1] "1" "canada" "3"
str(x)
## chr [1:3] "1" "canada" "3"
class(x)
## [1] "character"
x <- c(31,4,15,92,65)
x
## [1] 31 4 15 92 65
# considera la posicion del vector de acuerdo a su valor mas pequeño al mas grande
rank(x)
## [1] 3 1 2 5 4
# ordena los datos de menor a mayor
sort(x)
## [1] 4 15 31 65 92
# ordena los datos de mayor a menor
sort(x, decreasing = TRUE)
## [1] 92 65 31 15 4
library(dslabs)
m <- murders
View(m)
v1<-m$total
sort(v1)
## [1] 2 4 5 5 7 8 11 12 12 16 19 21 22 27 32
## [16] 36 38 53 63 65 67 84 93 93 97 97 99 111 116 118
## [31] 120 135 142 207 219 232 246 250 286 293 310 321 351 364 376
## [46] 413 457 517 669 805 1257
sort(v1,decreasing = TRUE)
## [1] 1257 805 669 517 457 413 376 364 351 321 310 293 286 250 246
## [16] 232 219 207 142 135 120 118 116 111 99 97 97 93 93 84
## [31] 67 65 63 53 38 36 32 27 22 21 19 16 12 12 11
## [46] 8 7 5 5 4 2
#¿como encontramos el mayor vaor de v1?
max(v1)
## [1] 1257
min(v1)
## [1] 2
#¿cual es la posicion del vector en donde esta el valor max?
which.max(v1) #posicion del valor mas alto
## [1] 5
which.min(v1)#posicion del valor mas pequeño
## [1] 46
El nombre del estado que tiene la máxima población
m$state[which.max(m$population)]
## [1] "California"
rm(estado)
## Warning in rm(estado): objeto 'estado' no encontrado
# como obtenemos una tasa de homicidios
rate <- m$total/m$population *100000
sort(rate)
## [1] 0.3196211 0.3798036 0.5145920 0.5947151 0.6893484 0.7655102
## [7] 0.7959810 0.8280881 0.8871131 0.9396843 0.9825837 0.9992600
## [13] 1.2128379 1.2924531 1.3829942 1.4571013 1.5200933 1.7056487
## [19] 1.7521372 1.8021791 2.1900730 2.2081106 2.6679599 2.6732010
## [25] 2.6751860 2.6871225 2.7139722 2.7980319 2.8244238 2.8369608
## [31] 2.9589340 2.9993237 3.1104763 3.1246001 3.1893901 3.2013603
## [37] 3.2537239 3.3741383 3.3980688 3.4509357 3.5977513 3.6295273
## [43] 3.7903226 4.0440846 4.1786225 4.2319369 4.4753235 5.0748655
## [49] 5.3598917 7.7425810 16.4527532
sort(rate,decreasing=TRUE)
## [1] 16.4527532 7.7425810 5.3598917 5.0748655 4.4753235 4.2319369
## [7] 4.1786225 4.0440846 3.7903226 3.6295273 3.5977513 3.4509357
## [13] 3.3980688 3.3741383 3.2537239 3.2013603 3.1893901 3.1246001
## [19] 3.1104763 2.9993237 2.9589340 2.8369608 2.8244238 2.7980319
## [25] 2.7139722 2.6871225 2.6751860 2.6732010 2.6679599 2.2081106
## [31] 2.1900730 1.8021791 1.7521372 1.7056487 1.5200933 1.4571013
## [37] 1.3829942 1.2924531 1.2128379 0.9992600 0.9825837 0.9396843
## [43] 0.8871131 0.8280881 0.7959810 0.7655102 0.6893484 0.5947151
## [49] 0.5145920 0.3798036 0.3196211
?sort
## starting httpd help server ... done
?order
estado <- m$state
estado[order(rate,decreasing= TRUE)]
## [1] "District of Columbia" "Louisiana" "Missouri"
## [4] "Maryland" "South Carolina" "Delaware"
## [7] "Michigan" "Mississippi" "Georgia"
## [10] "Arizona" "Pennsylvania" "Tennessee"
## [13] "Florida" "California" "New Mexico"
## [16] "Texas" "Arkansas" "Virginia"
## [19] "Nevada" "North Carolina" "Oklahoma"
## [22] "Illinois" "Alabama" "New Jersey"
## [25] "Connecticut" "Ohio" "Alaska"
## [28] "Kentucky" "New York" "Kansas"
## [31] "Indiana" "Massachusetts" "Nebraska"
## [34] "Wisconsin" "Rhode Island" "West Virginia"
## [37] "Washington" "Colorado" "Montana"
## [40] "Minnesota" "South Dakota" "Oregon"
## [43] "Wyoming" "Maine" "Utah"
## [46] "Idaho" "Iowa" "North Dakota"
## [49] "Hawaii" "New Hampshire" "Vermont"
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.1.3
##
## Attaching package: 'dplyr'
##
## The following objects are masked from 'package:stats':
##
## filter, lag
##
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
data2 <- m %>% mutate(rate= m$total/m$population *100000)
View(data2)
# para redondear decimales usamos esta funcion: round(vector,n)
round(3.453435,2)
## [1] 3.45
¿Cual sería la diferencia al usar order() y sort()?
x <- c(2,43,27,96,18)
order(x)
## [1] 1 5 3 2 4
sort(x)
## [1] 2 18 27 43 96
rank(x)
## [1] 1 4 3 5 2
# Si el vector "times" representa el tiempo en minutos, pasar a horas y que tenga dos decimales
times<- c(10,30,40,50)
times <- round(times/60,2)
Un data frame es una lista de vectores, que cumple:
Nombre <- c("Andres","Gabriela","Israel","Juan")
Edad <- c(21,22,19,"22")
Ciudad <- c("Quito","Cuenca","Loja","Quito")
df_1 <- data.frame(Nombre,Edad,Ciudad)
df_1$Ciudad <- as.factor(df_1$Ciudad)
str(df_1)
## 'data.frame': 4 obs. of 3 variables:
## $ Nombre: chr "Andres" "Gabriela" "Israel" "Juan"
## $ Edad : chr "21" "22" "19" "22"
## $ Ciudad: Factor w/ 3 levels "Cuenca","Loja",..: 3 1 2 3
df_1$Edad <- as.numeric(df_1$Edad)
str(df_1)
## 'data.frame': 4 obs. of 3 variables:
## $ Nombre: chr "Andres" "Gabriela" "Israel" "Juan"
## $ Edad : num 21 22 19 22
## $ Ciudad: Factor w/ 3 levels "Cuenca","Loja",..: 3 1 2 3
names(df_1) <- c("names","age","city")
# Para visualizar los primeros elementos del dataframe
head(m, n=10)
## state abb region population total
## 1 Alabama AL South 4779736 135
## 2 Alaska AK West 710231 19
## 3 Arizona AZ West 6392017 232
## 4 Arkansas AR South 2915918 93
## 5 California CA West 37253956 1257
## 6 Colorado CO West 5029196 65
## 7 Connecticut CT Northeast 3574097 97
## 8 Delaware DE South 897934 38
## 9 District of Columbia DC South 601723 99
## 10 Florida FL South 19687653 669
head(m,8)
## state abb region population total
## 1 Alabama AL South 4779736 135
## 2 Alaska AK West 710231 19
## 3 Arizona AZ West 6392017 232
## 4 Arkansas AR South 2915918 93
## 5 California CA West 37253956 1257
## 6 Colorado CO West 5029196 65
## 7 Connecticut CT Northeast 3574097 97
## 8 Delaware DE South 897934 38
# Para visualizar los ultimos elementos
tail(m,2)
## state abb region population total
## 50 Wisconsin WI North Central 5686986 97
## 51 Wyoming WY West 563626 5
lista <- list(1,c("hola","mundo"),df_1)
str(lista)
## List of 3
## $ : num 1
## $ : chr [1:2] "hola" "mundo"
## $ :'data.frame': 4 obs. of 3 variables:
## ..$ names: chr [1:4] "Andres" "Gabriela" "Israel" "Juan"
## ..$ age : num [1:4] 21 22 19 22
## ..$ city : Factor w/ 3 levels "Cuenca","Loja",..: 3 1 2 3
lista[[1]]
## [1] 1
lista[[2]]
## [1] "hola" "mundo"
lista[[3]]
## names age city
## 1 Andres 21 Quito
## 2 Gabriela 22 Cuenca
## 3 Israel 19 Loja
## 4 Juan 22 Quito
lista[[3]]$names
## [1] "Andres" "Gabriela" "Israel" "Juan"
matrix(1:12,nrow=3,ncol=4)
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
# cbind() para unir vectores, usando cada uno como una columna.
# rbind() para unir vectores, usando cada uno como un renglón.
nombre_funciones <- function(arg1,arg2,...)
{
# codigo
}
x <- c(3,4,5,6,7)
mean(x)
## [1] 5
media1 <- function(w)
{
s <- sum(w)
n <- length(w)
s/n
}
#Retorna lo ultimo que se esta ejecutando
media1(x)
## [1] 5
Crear una funcion para resolver ecuaciones de segundo grado: \(ax^2+bx+c=0\) y resolver \(x^2+x-1=0\)
raices <- function(a,b,c)
{
x1 <- (-1*b+sqrt(b^2-4*a*c))/(2*a)
x2 <- (-1*b-sqrt(b^2-4*a*c))/(2*a)
r <- c(x1,x2)
return(r)
}
raices(1,1,-1)
## [1] 0.618034 -1.618034
Una progresión geométrica es una sucesión de números \(a_1\), \(a_2\), \(a_3\) de modo que cada uno de ellos (excepto el primero) es igual al último multiplicado por una constante \(r\) llamada ratio.
Se puede verificar que,
an <- function(a1,r,n)
{
a1*r^(n-1)
}
an(a1=1,r=2,n=5)
## [1] 16
an(a1=1,n=5,r=2)
## [1] 16
an(1,2,5)
## [1] 16
args(an) # me muestra los argumentos de la funcion
## function (a1, r, n)
## NULL
sn <- function(a1,r,n)
{
a1*(r^n-1)/(r-1)
}
sn(1,2,5)
## [1] 31
valores <- an(a1=1,r=2,1:18)
sum(valores)
## [1] 262143
Supongamos un dado legal, determinar una tabla de frecuencias al realizar el lanzamiento de un dado tomado n=200, 500, 1000, 100000
dado <- function(n=100)
{
lanzamientos <- sample(1:6,n,rep=T)
frecuencia <- table(lanzamientos)/n
frecuencia
}
n <- 200
lanzamientos <- sample(1:6,n,rep=T) #genera n observaciones entre x=1,...,6 y se pueden repetir o no
frecuencia <- table(lanzamientos)/n # Table para contar
dado()
## lanzamientos
## 1 2 3 4 5 6
## 0.22 0.13 0.25 0.16 0.12 0.12
dado(200)
## lanzamientos
## 1 2 3 4 5 6
## 0.130 0.155 0.185 0.145 0.235 0.150
dado(500)
## lanzamientos
## 1 2 3 4 5 6
## 0.144 0.162 0.164 0.170 0.180 0.180
dado(1000)
## lanzamientos
## 1 2 3 4 5 6
## 0.180 0.151 0.165 0.161 0.168 0.175
dado(100000)
## lanzamientos
## 1 2 3 4 5 6
## 0.16858 0.16569 0.16599 0.16673 0.16723 0.16578
if(condicion) { # la condicion debe devoolver TRUE O FALSE # Ejecuta un código } else { # Ejecuta otro código }
queremos evaluar una funcion por partes:
f(x)=0, si x menor a 0 f(x)=x/10, si x esta entre 0 y 10 f(x)= , si x es mayor a 10
f_partes <- function(x)
{
if(x<0)
{
return(0)
}
else
{
if(x<=10)
{
return(x/10)
}
else
{
return(1)
}
}
}
f_partes(-1)
## [1] 0
f_partes(5)
## [1] 0.5
f_partes(100)
## [1] 1
Vamos a definir una funcion para definir si una funcion es par o impar.
# Para retornar texto: print("texto")
par_o_impar <- function(x)
{
if( x%%2 == 0)
{
print("Par")
}
else
{
print("Impar")
}
}
par_o_impar(8)
## [1] "Par"
ifelse(vector_condicional, valor_si_TRUE, valor_si_FALSE)
seq(1,8)
## [1] 1 2 3 4 5 6 7 8
ifelse(seq(1,8)<5, TRUE, FALSE)
## [1] TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE
Supongamos los siguientes vectores
x <- c(“hombre”,“hombre”,“mujer”,“hombre”,“mujer”) y <- c(10,14,80,56,27)
mostrar género, y si es mayor o menor de edad.
x <- c("hombre","hombre","mujer","hombre","mujer")
y <- c(10,14,80,56,27)
ifelse(x=="hombre",ifelse(y>=18,"Hombre adulto","Hombre menor de edad"),ifelse(y>=18,"Mujer adulta","Mujer menor de edad"))
## [1] "Hombre menor de edad" "Hombre menor de edad" "Mujer adulta"
## [4] "Hombre adulto" "Mujer adulta"
#Bucle for
for( i in lista) { # Código }
mascotas <- c("bobi","rufo","fido","morti","lazy", "oso","rocky","rex", "rambo")
# "Mi perro se llamaba: bobi"
for(i in 1:length(mascotas))
{
print(paste("Mi perro se llamaba:", mascotas[i])) # paste para unir texto en el print
}
## [1] "Mi perro se llamaba: bobi"
## [1] "Mi perro se llamaba: rufo"
## [1] "Mi perro se llamaba: fido"
## [1] "Mi perro se llamaba: morti"
## [1] "Mi perro se llamaba: lazy"
## [1] "Mi perro se llamaba: oso"
## [1] "Mi perro se llamaba: rocky"
## [1] "Mi perro se llamaba: rex"
## [1] "Mi perro se llamaba: rambo"
Usando dos bucles uno dentro de otro calcular la matriz de Hilbert (es una matriz cuadrada cuyos campos constituyen una fracción de la unidad)
matriz_hilbert <- function(n)
{
matriz <- matrix(0,nrow=n,ncol=n)
for(i in 1:n)
{
for(j in 1:n)
{
matriz[i,j]=1/(i+j-1)
}
}
matriz
}
matriz_hilbert(8)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,] 1.0000000 0.5000000 0.3333333 0.25000000 0.20000000 0.16666667 0.14285714
## [2,] 0.5000000 0.3333333 0.2500000 0.20000000 0.16666667 0.14285714 0.12500000
## [3,] 0.3333333 0.2500000 0.2000000 0.16666667 0.14285714 0.12500000 0.11111111
## [4,] 0.2500000 0.2000000 0.1666667 0.14285714 0.12500000 0.11111111 0.10000000
## [5,] 0.2000000 0.1666667 0.1428571 0.12500000 0.11111111 0.10000000 0.09090909
## [6,] 0.1666667 0.1428571 0.1250000 0.11111111 0.10000000 0.09090909 0.08333333
## [7,] 0.1428571 0.1250000 0.1111111 0.10000000 0.09090909 0.08333333 0.07692308
## [8,] 0.1250000 0.1111111 0.1000000 0.09090909 0.08333333 0.07692308 0.07142857
## [,8]
## [1,] 0.12500000
## [2,] 0.11111111
## [3,] 0.10000000
## [4,] 0.09090909
## [5,] 0.08333333
## [6,] 0.07692308
## [7,] 0.07142857
## [8,] 0.06666667
#Matrix
1:12
## [1] 1 2 3 4 5 6 7 8 9 10 11 12
A <- matrix(1:12, nrow=3, ncol= 4)
v1 <- 1:4
v2 <- 5:8
v3 <- 9:12
v4 <- 13:16
matriz <- rbind(v1,v2,v3,v4) #row por filas
matriz2 <- cbind(v1,v2,v3,v4) #cols por columnas
class(matriz2)
## [1] "matrix" "array"
str(matriz2)
## int [1:4, 1:4] 1 2 3 4 5 6 7 8 9 10 ...
## - attr(*, "dimnames")=List of 2
## ..$ : NULL
## ..$ : chr [1:4] "v1" "v2" "v3" "v4"
dim(matriz2)
## [1] 4 4
matrix(1,nrow=3,ncol=3)
## [,1] [,2] [,3]
## [1,] 1 1 1
## [2,] 1 1 1
## [3,] 1 1 1
# Consideremos una matriz de mxn(m:filas, n:columnas)
MHilbert <- function(m,n)
{
y <- matrix(1,nrow=m,ncol=n)
for (i in 1:m) {
for (j in 1:n) {
y[i,j]=1/(i+j-1)
}
}
y
}
MHilbert(3,3)
## [,1] [,2] [,3]
## [1,] 1.0000000 0.5000000 0.3333333
## [2,] 0.5000000 0.3333333 0.2500000
## [3,] 0.3333333 0.2500000 0.2000000
library(dslabs)
library(dplyr)
data(murders)
murder_rate <- murders$total/murders$population*10000
data <- murders
data <- data %>% mutate(murder_rate)
View(data)