1.2 VECTORES
1.3 MATRICES
1.4 OPERACIONES VECTORIALES Y MATRICIALES
2.1 TIPOS DE DATOS
2.2 MARCOS DE DATOS
2.3 LISTAS
2.4 FUNCIONES
2.6 EJERCICIO DATOS INEGI CENSO 2020_AGUASCALINTES
2.8 EJERCICIO MENOS VALOR CERCANO AL PROMEDIO
2.9 EJERCICIO
De principio es importante concocer el ambiente de trabajo en R-studio:
Ventana de script arriba izquierda
Consola de acciones abajo izquierda
Ambiente de varibales arriba derecha
Información de ayuda y archivos abajo derecha
Las acciones básica para trabjar en R son:
# a. Se utliza "#" para poner comentrios poner comentarios que se intrerpretan como texto
# b. Para correr instrucciones "Ctrl+ Enter", con línea seleccionada
#también se puede seleccionar toda la línea e ir al botón de "run"
Podemos utilizar R como calculadora con operaciónes artiméticas simples:
¡Importante! ser estrictos con el orden de las operaciones y los paréntesis
#ejemplo:
2+2
## [1] 4
3*8
## [1] 24
50+(60*7**2+5)
## [1] 2995
50+(60*7**(2+5))
## [1] 49412630
Para obtener los libros de ayuda de las funciones:
se utliza “?” seguido de la función que queremos ayuda
ejemplo:
?rnorm
# se utiliza la siguente función cuando mas o menos te acuerdas de la función
#de la que se requiera ayuda
#ejemplo:
apropos("sequ")
## [1] "sequence" "sequence.default"
Para asignar los valores a una variable:
#se tutiliza "<-" para signar valores a un nombre, tal como si crearamos una variable
# y éstas las utilizamos para operar
#ejemplo:
x <- 5
y<- 12
x+y
## [1] 17
z <- x
z
## [1] 5
log(x)
## [1] 1.609438
#se escriben entre "()" los argumentos que denotamos a la función
seq(0.5, 7.5, 0.5)
## [1] 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5
secu <- seq(0.5, 7.5, 0.5)
secu
## [1] 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5
Asignación de valores
vect1<-15 #asignación de valores
vect2<-18
#a las asignaciones también se les conoce como vectores
Diferentes formas de denotar un vector:
#existen distintas maneras de denotar un vector:
vect3<-c(vect1,vect2, 20, 24) #c es de concatenar = unir/juntar en un elemento
vect3
## [1] 15 18 20 24
vect4 <- seq(from=10, to=40, by=10) # secuencia de números consecutivos de tanto en tanto
vect4
## [1] 10 20 30 40
vect5<- rep(5, 6) #rep=repetir x número, tantas veces
vect5
## [1] 5 5 5 5 5 5
vect6<-rep(vect4, 4) #repite tantas veces un vector ya establecido
vect6
## [1] 10 20 30 40 10 20 30 40 10 20 30 40 10 20 30 40
vect7<-rep(vect4, each=4) #repetir cada elemento
Medición de vectores:
length(vect4) #largo de vector
## [1] 4
dim_vec<-length(vect4) #dimensiones del vector
dim_vec
## [1] 4
Para eliminar las variables asignadas en el ambiente de trabajo:
#Se utiliza "ctrl + l" para borrar lo preiviamente realizado en la consola
#rm() #remove algún elemento del ambiente
###ls() #enlistar todos los elemtos del ambiente que se quieren borrar
practio<-1
#ls()
rm(practio) #elimina la variable practio
vect1<-15
vect4 <- seq(from=10, to=40, by=10)
rm(list=ls()) #elimina todos los elementos
rm(list=c("vect1", "vect4")) #enlistar varios elementos a eliminar
#
Para instalar paqueterías y accionarlas
#se utiliza "install.packages ()" para instalar los paquetes
#se utiliza "library()" para accionarlos
library(lubridate) #manejo de fechas
library(readxl) # leer archivos .xlsx
library(kernlab) # métodods de clasificación o clusterización
En R se puede computar de forma matricial. En este sentido, las matrices se denotan de la siguiente manera:
# Las matrices se denotan en el orden {fila, columna}
#ejemplo:
# matriz 4X4
pract<-c(5,7,3,9,7,12,6,7)
#matriz con los valores de pract, con 4 columnas,
#que va tomando los valores por fila
practi_mat<- matrix(pract, ncol=4, byrow= TRUE)
practi_mat
## [,1] [,2] [,3] [,4]
## [1,] 5 7 3 9
## [2,] 7 12 6 7
#matriz con los valores de pract, con 4 filas,
#que va tomando los valores por fila
practi_mat2 <- matrix(pract, nrow=4, byrow=TRUE)
practi_mat2
## [,1] [,2]
## [1,] 5 7
## [2,] 3 9
## [3,] 7 12
## [4,] 6 7
# la función "dim()" te dice las dimenciones de la matriz
dim(practi_mat)
## [1] 2 4
#ejemplo 2:
#Es posible escribri los valores y matriz en la misma línea de código
practi_mat3<- matrix( c(11,25,3,65,9,32,3,65,2,5,9,7),
ncol=3, byrow= TRUE)
practi_mat3
## [,1] [,2] [,3]
## [1,] 11 25 3
## [2,] 65 9 32
## [3,] 3 65 2
## [4,] 5 9 7
Multiplicación de escalar por matriz
Ejemplo:
#multiplicación de escalar por matriz
#ejemplo:
3*practi_mat3
## [,1] [,2] [,3]
## [1,] 33 75 9
## [2,] 195 27 96
## [3,] 9 195 6
## [4,] 15 27 21
Posiciones matriz[fila, vector]
Ejemplo:
#se indican las posiciones en este orden "matriz[fila, vector]"
#ejemplo:
practi_mat3
## [,1] [,2] [,3]
## [1,] 11 25 3
## [2,] 65 9 32
## [3,] 3 65 2
## [4,] 5 9 7
practi_mat3[2,3]#fila 2, columna 3
## [1] 32
practi_mat3[,3] #todas las filas
## [1] 3 32 2 7
practi_mat3[2,] #todas las columnas
## [1] 65 9 32
practi_mat3[1:3,] #rangos fila 1 a 3 de todas las columnas
## [,1] [,2] [,3]
## [1,] 11 25 3
## [2,] 65 9 32
## [3,] 3 65 2
practi_mat3[-1,] # todas las filas menos la fila 1 y todas columnas
## [,1] [,2] [,3]
## [1,] 65 9 32
## [2,] 3 65 2
## [3,] 5 9 7
practi_mat3[c(1,4), ] # quitar elementos de la matriz no continuos
## [,1] [,2] [,3]
## [1,] 11 25 3
## [2,] 5 9 7
practi_mat3[-c(2,3),] # continuar
## [,1] [,2] [,3]
## [1,] 11 25 3
## [2,] 5 9 7
Álgebra de matrices:
Matriz traspuesta:
#Mariz traspuesta
practi_mat3#matriz base
## [,1] [,2] [,3]
## [1,] 11 25 3
## [2,] 65 9 32
## [3,] 3 65 2
## [4,] 5 9 7
t(practi_mat3) #trasopuesta de la matriz practi_mat3
## [,1] [,2] [,3] [,4]
## [1,] 11 65 3 5
## [2,] 25 9 65 9
## [3,] 3 32 2 7
Inversa de una matriz funación solve()
# Inversa de una matriz
#Se convierte a la matriz en cuadrada para que sea matemáticamente invertible
practi_mat4<- practi_mat3[-4,] #se quita la última fila de la matriz
inv<-round(solve(practi_mat4),2 )#matriz inversa función solve
inv
## [,1] [,2] [,3]
## [1,] 0.19 -0.01 -0.07
## [2,] 0.00 0.00 0.01
## [3,] -0.38 0.06 0.14
Multiplicación de una matriz
#Multiplicación de una matriz
# se utiliz "%*%" para que se multipliquen matrices
#primero se obtienen las dimensiones de las matrices para que sean multiplicables entre sí.
#si las dimensiones internas de la multiplicación son iguales, entonces se pueden multiplicar
dim(practi_mat3) #4*3
## [1] 4 3
dim(practi_mat4) #3*3
## [1] 3 3
practi_mat3 %*% practi_mat4
## [,1] [,2] [,3]
## [1,] 1755 695 839
## [2,] 1396 3786 547
## [3,] 4264 790 2093
## [4,] 661 661 317
round(practi_mat4 %*% inv, 2)
## [,1] [,2] [,3]
## [1,] 0.95 0.07 -0.10
## [2,] 0.19 1.27 0.02
## [3,] -0.19 0.09 0.72
Sistemas de ecuaciones:
# se utiliza la función "solve()" para resolver sistemas de ecuaciones
?solve #buscar información de la fución
#ejemplo:
#se toma el siguiente sistema:
#5x-3y+2z=1
#-2x+2y-z=5
#4x+2y-4z=-3
#se define la matriz
coeficientes <- matrix(c(5,-3,2,-2,2,-1,4,2,-4), byrow = TRUE, ncol=3)
coeficientes
## [,1] [,2] [,3]
## [1,] 5 -3 2
## [2,] -2 2 -1
## [3,] 4 2 -4
respuestas<-c(1,5,-3)
#se obtienen las incognitas
#forma 1
solve(coeficientes, respuestas)
## [1] 2.388889 8.611111 7.444444
#forma 2
ainv <-solve(coeficientes) #se toma matriz identidad y se calcula la inversa
solucion <- solve(coeficientes, respuestas)
solucion
## [1] 2.388889 8.611111 7.444444
Ejemplo:
#ejemplo 2
#intentemos x=b*a^(-1)%*%b
#1x3 3x3
respuestas%*%ainv
## [,1] [,2] [,3]
## [1,] 1.666667 4.555556 0.4444444
ainv%*%respuestas# esta es la buena
## [,1]
## [1,] 2.388889
## [2,] 8.611111
## [3,] 7.444444
#Suma, resta
#tienen que tener las mismas dimensiones nxn
coeficientes
## [,1] [,2] [,3]
## [1,] 5 -3 2
## [2,] -2 2 -1
## [3,] 4 2 -4
practi_mat4
## [,1] [,2] [,3]
## [1,] 11 25 3
## [2,] 65 9 32
## [3,] 3 65 2
coeficientes + practi_mat4
## [,1] [,2] [,3]
## [1,] 16 22 5
## [2,] 63 11 31
## [3,] 7 67 -2
t(coeficientes) #traspuesta
## [,1] [,2] [,3]
## [1,] 5 -2 4
## [2,] -3 2 2
## [3,] 2 -1 -4
diag(coeficientes) #extrae los elementos de la diagonal
## [1] 5 2 -4
Determinanates
### determinante
#cbind pegar matrices en columnas
cbind(coeficientes, coeficientes[,1:2]) # concatenar matrices y sus partes en columnas
## [,1] [,2] [,3] [,4] [,5]
## [1,] 5 -3 2 5 -3
## [2,] -2 2 -1 -2 2
## [3,] 4 2 -4 4 2
rbind(coeficientes, coeficientes[1:2,]) # concatenar matrices y sus partes en filas
## [,1] [,2] [,3]
## [1,] 5 -3 2
## [2,] -2 2 -1
## [3,] 4 2 -4
## [4,] 5 -3 2
## [5,] -2 2 -1
det(coeficientes) #determinante
## [1] -18
Tipos de variables numéricas, strings, categóricas:
Variable con elementos de factor categórico
Ejemplo:
#variable con elementos de factor categórico
#ejemplo:
#se define la variable con letras que indican, de manera reusmida
#la categorías "H" hombre o "M" mujer
vari1<- c("M", "H")
vari2<-c("M","H","M","H","H","M","M","M","M","H","H","H","M")
length(vari2) #largo de la variable = número de elementos en el vector
## [1] 13
table (vari2) #frecuencias
## vari2
## H M
## 6 7
Ejemplo 2:
Variables categóricas
#ejemplo2:
#en este ejemplo las categorías se representan con "1" o "0" pero,
#no se leen como números, sino como categorías.
vari3<-c("1","0","1","0","0","1","1","1","1","0","0","0","1")
La función table() se utiliza para hacer conteo de las categorías que se tienen dentro de un vector
Ejemplo:
#la función "table" se utiliza para hacer conteo de las categorías que se tienen
#dentro de un vector
#ejemplo:
table(vari3)
## vari3
## 0 1
## 6 7
#es posible hacer el conteo como cruce entre dos vetores
#ejemplo:
table(vari2, vari3)
## vari3
## vari2 0 1
## H 6 0
## M 0 7
Función factor()
#la función de "factor"arroja las distintas categorías que están registradas en
#el vector
factor(vari3)
## [1] 1 0 1 0 0 1 1 1 1 0 0 0 1
## Levels: 0 1
Modificar un elemento del vector
variables a elementos numéricos para convertir las categorías a números se utiliza “as.numeric” para convertir
## modificar un elemento
as.numeric(vari3) #forzas a que sea numérico
## [1] 1 0 1 0 0 1 1 1 1 0 0 0 1
#cuando se quiere cambiar el valor de un elemento específico del vector
#se pone entre "[]" el número de la posición seguido de se denota el nuevo valor
#ejemplo:
vari3[5] <- "cero"
vari3
## [1] "1" "0" "1" "0" "cero" "1" "1" "1" "1" "0"
## [11] "0" "0" "1"
#si quiere convertir a valor numérico pero hay algún valor que no sea un número
#cambia los strings por NA cuando hay cosas que no sean números
#ejemplo:
as.numeric(vari3)
## [1] 1 0 1 0 NA 1 1 1 1 0 0 0 1
#ejemplo integrador:
vect4 <- seq(from=10, to=40, by=10)
vect6<-rep(vect4, 4)
matriz8<-cbind(vari2, vari3) #se unen dos vectores
matriz8
## vari2 vari3
## [1,] "M" "1"
## [2,] "H" "0"
## [3,] "M" "1"
## [4,] "H" "0"
## [5,] "H" "cero"
## [6,] "M" "1"
## [7,] "M" "1"
## [8,] "M" "1"
## [9,] "M" "1"
## [10,] "H" "0"
## [11,] "H" "0"
## [12,] "H" "0"
## [13,] "M" "1"
length(matriz8) #se obtiene la longitud del vector
## [1] 26
dim(matriz8) #se obtienen las dimensiones de una matriz
## [1] 13 2
matriz9<-cbind(vect6[1:13], vari2) #se denota una matriz
matriz9 #Todo a no numérico
## vari2
## [1,] "10" "M"
## [2,] "20" "H"
## [3,] "30" "M"
## [4,] "40" "H"
## [5,] "10" "H"
## [6,] "20" "M"
## [7,] "30" "M"
## [8,] "40" "M"
## [9,] "10" "M"
## [10,] "20" "H"
## [11,] "30" "H"
## [12,] "40" "H"
## [13,] "10" "M"
Dataframes o marcos de datos, pueden alojar disctintos tipos de factores:
para definir un dat frame se utiliza la función data.frame() se denota la matriz con dos vectores que ya teníamos definidos
Ejemplos
#para definir un dat frame se utiliza la función "data.frame"
#se denota la matriz con dos vectores que ya teníamos definidos
#ejemplo 1
vect4 <- seq(from=10, to=40, by=10) # secuencia de números consecutivos de tanto en tanto
vect7<-rep(vect4, each=4) #repetir cada elemento
vect4 <- seq(from=10, to=40, by=10)
vect6<-rep(vect4, 4)
data.frame(vector=vect6[1:13], vector2=vari2)
## vector vector2
## 1 10 M
## 2 20 H
## 3 30 M
## 4 40 H
## 5 10 H
## 6 20 M
## 7 30 M
## 8 40 M
## 9 10 M
## 10 20 H
## 11 30 H
## 12 40 H
## 13 10 M
#ejemplo 2
data.frame(vector=as.numeric(vect6[1:13]), vector2=vari3)
## vector vector2
## 1 10 1
## 2 20 0
## 3 30 1
## 4 40 0
## 5 10 cero
## 6 20 1
## 7 30 1
## 8 40 1
## 9 10 1
## 10 20 0
## 11 30 0
## 12 40 0
## 13 10 1
#ejemplo 3
data.frame(vector=(vect6[1:13]), vector2=as.numeric(vari3))
## vector vector2
## 1 10 1
## 2 20 0
## 3 30 1
## 4 40 0
## 5 10 NA
## 6 20 1
## 7 30 1
## 8 40 1
## 9 10 1
## 10 20 0
## 11 30 0
## 12 40 0
## 13 10 1
#ejemplo4 con nombre
matriz11<-data.frame(vector=(vect6[1:13]), vector2=as.factor(vari3))
#ejemplo 5 con más vectores
matriz12<-data.frame(Vector=as.numeric(vect6[1:13]),Vector2=as.factor(vari3),
Vector3=as.numeric(vect7[1:13]),
Vector4=as.factor(vari2))
matriz12
## Vector Vector2 Vector3 Vector4
## 1 10 1 10 M
## 2 20 0 10 H
## 3 30 1 10 M
## 4 40 0 10 H
## 5 10 cero 20 H
## 6 20 1 20 M
## 7 30 1 20 M
## 8 40 1 20 M
## 9 10 1 30 M
## 10 20 0 30 H
## 11 30 0 30 H
## 12 40 0 30 H
## 13 10 1 40 M
#Preguntas informativas
# se utilizan para obtner "TRUE" or "FALSE" con base a la
is.data.frame(matriz12)
## [1] TRUE
is.data.frame(matriz9)
## [1] FALSE
is.factor(matriz12$Vector2[1])
## [1] TRUE
# se utiliza la función "View" para ver los elementos de la matriz o data frame
#View(matriz12) #ver los elementos de la matriz
Listas pueden contener diversos tipos de arreglos de datos:
#denotamos una lista con la función "list"
#ejemplo 1:
vari1<- c("M", "H")
vari2<-c("M","H","M","H","H","M","M","M","M","H","H","H","M")
vari3<-c("1","0","1","0","0","1","1","1","1","0","0","0","1")
matriz8<-cbind(vari2, vari3)
casa<-list("Hola mundo en la lista", vari1, matriz8)
casa
## [[1]]
## [1] "Hola mundo en la lista"
##
## [[2]]
## [1] "M" "H"
##
## [[3]]
## vari2 vari3
## [1,] "M" "1"
## [2,] "H" "0"
## [3,] "M" "1"
## [4,] "H" "0"
## [5,] "H" "0"
## [6,] "M" "1"
## [7,] "M" "1"
## [8,] "M" "1"
## [9,] "M" "1"
## [10,] "H" "0"
## [11,] "H" "0"
## [12,] "H" "0"
## [13,] "M" "1"
is.list(casa) #pregunta informativa
## [1] TRUE
#se ailsa una columna del arreglo de datos con el nombre del arreglo y el nombre de la
#columna divididos por un "$"
#ejemplo 1
casa$Mensaje
## NULL
#ejemplo 2
casa$Vector[2] #elijo un elemento específico de una columna
## NULL
casa$Matriz$Vector
## NULL
casa
## [[1]]
## [1] "Hola mundo en la lista"
##
## [[2]]
## [1] "M" "H"
##
## [[3]]
## vari2 vari3
## [1,] "M" "1"
## [2,] "H" "0"
## [3,] "M" "1"
## [4,] "H" "0"
## [5,] "H" "0"
## [6,] "M" "1"
## [7,] "M" "1"
## [8,] "M" "1"
## [9,] "M" "1"
## [10,] "H" "0"
## [11,] "H" "0"
## [12,] "H" "0"
## [13,] "M" "1"
Las funciones primarias en R son aquellas que nos dan parametros de la información
Ejemplo
# las funciones primarias en R son aquellas que nos dan parametros
#de la información
#ejemplo 1
#denotamos una matriz de información
matriz13<-cbind(matriz12$Vector, matriz12$Vector3) #matriz con columnas específicas
#en los siguientes ejemplos de las funicones se trabajan para la todas las filas
# en las columna 2
#se obtiene la media con la función "mean"
mean(matriz13[,2])
## [1] 21.53846
#se obtiene la desviación estándar con la función "sd"
sd(matriz13[,2])
## [1] 9.870962
#se obtiene el valor máximo con la función "max"
max(matriz13[,2])
## [1] 40
# se obtiene el valor mínimo con la función "min"
min(matriz13[,2])
## [1] 10
Las funciones personalizadas refiere a la obtención de parámetros de la información operando las funciones básicas de R, las matrices y sus elementos.
El ejemplo que aquí se muestra es integrador de algunas de las acciones previamente mostradas.
#Para los ejemplos contenidos en esta sección se utiliza la base de datos
#Iris. Esta base de datos se encuentra en al memoria de R. Por lo tanto,
#sólo tenemos que llamarla
#ejemplo 1:
#data
#data(iris)
?iris #se pide información de la base de datos
#View(iris) #se observa el contenido extendido de la base de datos
dim(iris) # obtenemos la dimensión de la base de datos
## [1] 150 5
is.matrix(iris) #preguntamos si es matriz
## [1] FALSE
is.data.frame(iris) #preguntamos si es data frame
## [1] TRUE
is.list(iris) # preguntamos si es lista
## [1] TRUE
#iris[,5] #aislamos la columna número 5 con todas sus filas
is.factor(iris[,5]) #preguntamos si la columna es 5 es un factor
## [1] TRUE
Ejemplo 2
#ejemplo 2
#cargamos otra base de datos, que contiene la misma información pero está construída
#en 3 dimensiones
#data(iris3) #cargamos datos
#View(iris3) # vemos de manera extendida la base de datos
is.matrix(iris3) # preguntamos si es matriz
## [1] FALSE
is.list(iris3) # preguntamos is es lista
## [1] FALSE
dim(iris3) # preguntamos sus dimensiones #note que aquí son tres dimensiones
## [1] 50 4 3
head(iris3) # esta función nos muestra en consola los primeros valores del dataframe
## , , Setosa
##
## Sepal L. Sepal W. Petal L. Petal W.
## [1,] 5.1 3.5 1.4 0.2
## [2,] 4.9 3.0 1.4 0.2
## [3,] 4.7 3.2 1.3 0.2
## [4,] 4.6 3.1 1.5 0.2
## [5,] 5.0 3.6 1.4 0.2
## [6,] 5.4 3.9 1.7 0.4
##
## , , Versicolor
##
## Sepal L. Sepal W. Petal L. Petal W.
## [1,] 7.0 3.2 4.7 1.4
## [2,] 6.4 3.2 4.5 1.5
## [3,] 6.9 3.1 4.9 1.5
## [4,] 5.5 2.3 4.0 1.3
## [5,] 6.5 2.8 4.6 1.5
## [6,] 5.7 2.8 4.5 1.3
##
## , , Virginica
##
## Sepal L. Sepal W. Petal L. Petal W.
## [1,] 6.3 3.3 6.0 2.5
## [2,] 5.8 2.7 5.1 1.9
## [3,] 7.1 3.0 5.9 2.1
## [4,] 6.3 2.9 5.6 1.8
## [5,] 6.5 3.0 5.8 2.2
## [6,] 7.6 3.0 6.6 2.1
#para denotar una posición dentro del arreglo en 3 dimensiones es: [FILA, COLUMNA, PROFUNDIDAD]
iris3[1, ,]
## Setosa Versicolor Virginica
## Sepal L. 5.1 7.0 6.3
## Sepal W. 3.5 3.2 3.3
## Petal L. 1.4 4.7 6.0
## Petal W. 0.2 1.4 2.5
head(iris3[,1,] )
## Setosa Versicolor Virginica
## [1,] 5.1 7.0 6.3
## [2,] 4.9 6.4 5.8
## [3,] 4.7 6.9 7.1
## [4,] 4.6 5.5 6.3
## [5,] 5.0 6.5 6.5
## [6,] 5.4 5.7 7.6
head(iris3[,1,]) #sepal L. de cada flor
## Setosa Versicolor Virginica
## [1,] 5.1 7.0 6.3
## [2,] 4.9 6.4 5.8
## [3,] 4.7 6.9 7.1
## [4,] 4.6 5.5 6.3
## [5,] 5.0 6.5 6.5
## [6,] 5.4 5.7 7.6
iris3[,1,1] #sepal L. de la setosa
## [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7
## [20] 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5 4.9 5.0 5.5 4.9
## [39] 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6 5.3 5.0
iris3[,1,2] # sepal l. de versicolor
## [1] 7.0 6.4 6.9 5.5 6.5 5.7 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1 5.6 6.7 5.6 5.8 6.2
## [20] 5.6 5.9 6.1 6.3 6.1 6.4 6.6 6.8 6.7 6.0 5.7 5.5 5.5 5.8 6.0 5.4 6.0 6.7 6.3
## [39] 5.6 5.5 5.5 6.1 5.8 5.0 5.6 5.7 5.7 6.2 5.1 5.7
iris3[,1,3] #sepal l. de virginica
## [1] 6.3 5.8 7.1 6.3 6.5 7.6 4.9 7.3 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5 7.7 7.7
## [20] 6.0 6.9 5.6 7.7 6.3 6.7 7.2 6.2 6.1 6.4 7.2 7.4 7.9 6.4 6.3 6.1 7.7 6.3 6.4
## [39] 6.0 6.9 6.7 6.9 5.8 6.8 6.7 6.7 6.3 6.5 6.2 5.9
#promedios
mean(iris3[,1,1]) #mean of sepal l. of setosa
## [1] 5.006
#promedios
mean(iris3[,2,1]) #mean of sepal w. of setosa
## [1] 3.428
Función apply()
#regresamos a la base IRIS en arreglo bidimensional
#iris
mean(iris[1:50, 1]) #meanof sepal l.
## [1] 5.006
#función apply
# "apply()" aplica de manera masiva la función a las filas o columnas
?apply #pedimos infomación acerca de la función apply
apply(iris[, -5], 2, mean) #establecemos la media en todas las columnas excepto al 5 (que no es numérica)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 5.843333 3.057333 3.758000 1.199333
apply(iris [51:100, -5], 2, mean) # establecemos promedio versicolor
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 5.936 2.770 4.260 1.326
prom_setosa<-apply(iris[1:50,-5],2,mean) #Promedios de Setosa
prom_versi<-apply(iris[51:100,-5],2,mean) #Promedios de Versicolor
prom_virgi<-apply(iris[101:150,-5],2,mean) #Promedios de Virginical
#Conjuntar información de las medias en una tabla
promedio_flores<-data.frame(Setosa=prom_setosa,
Versicolor=prom_versi,
Virginical=prom_virgi)
promedio_flores
## Setosa Versicolor Virginical
## Sepal.Length 5.006 5.936 6.588
## Sepal.Width 3.428 2.770 2.974
## Petal.Length 1.462 4.260 5.552
## Petal.Width 0.246 1.326 2.026
# Obtener la sd (desviación estándar) de cada flor de sus 4 variables
#Pero, de la base iris3
#data(iris3)
#iris3
sd_setosa<-apply(iris3[, ,1],2, sd) #sd de setosa
sd_versi<-apply(iris3[, ,2], 2, sd) #sd de versicolor
sd_virgi<-apply(iris3[, ,3], 2, sd) #sd de virginical
#Conjuntar información de las medias en una tabla
sd_flores<-data.frame(Setosa=sd_setosa,
Versicolor=sd_versi,
Virginical=sd_virgi)
sd_flores
## Setosa Versicolor Virginical
## Sepal L. 0.3524897 0.5161711 0.6358796
## Sepal W. 0.3790644 0.3137983 0.3224966
## Petal L. 0.1736640 0.4699110 0.5518947
## Petal W. 0.1053856 0.1977527 0.2746501
rownames(sd_flores)<-c("Largo sépalo","Ancho sépalo","Largo pétalo",
"Ancho pétalo") #Cambio de nombres
colnames(sd_flores)<-c("Set","Versi","Virgi")
sd_flores
## Set Versi Virgi
## Largo sépalo 0.3524897 0.5161711 0.6358796
## Ancho sépalo 0.3790644 0.3137983 0.3224966
## Largo pétalo 0.1736640 0.4699110 0.5518947
## Ancho pétalo 0.1053856 0.1977527 0.2746501
sd_flores
## Set Versi Virgi
## Largo sépalo 0.3524897 0.5161711 0.6358796
## Ancho sépalo 0.3790644 0.3137983 0.3224966
## Largo pétalo 0.1736640 0.4699110 0.5518947
## Ancho pétalo 0.1053856 0.1977527 0.2746501
apply(iris3[,,3], 2, summary) #tenemos los parámetros de summary para Sepal en todas sus columnas
## Sepal L. Sepal W. Petal L. Petal W.
## Min. 4.900 2.200 4.500 1.400
## 1st Qu. 6.225 2.800 5.100 1.800
## Median 6.500 3.000 5.550 2.000
## Mean 6.588 2.974 5.552 2.026
## 3rd Qu. 6.900 3.175 5.875 2.300
## Max. 7.900 3.800 6.900 2.500
#se excluye la quinta por no ser numeric, se obtiene el promedio de todas las columnas
colMeans(iris[,1:4])
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 5.843333 3.057333 3.758000 1.199333
#para los valores del 1 al 50 de todas las columnas excepto la 5 se obtienen las medias y se juntan los reusltados
rbind(colMeans(iris[1:50,-5]))
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## [1,] 5.006 3.428 1.462 0.246
Función aggregate()
#Función aggregate
# agregate () relaciona las variables dependientes con la dependiente mediante la función que se establezca
?aggregate #se pide mayor información de la función
# izq. variable numérica (dependiente) ... derecha no numérica (independiente1)
#Y~X
#View(iris)
aggregate(Sepal.Length~Species, data=iris, mean) #se relacionan los promedios de Sepal.Length con las espcies
## Species Sepal.Length
## 1 setosa 5.006
## 2 versicolor 5.936
## 3 virginica 6.588
aggregate(Sepal.Width~Species, data=iris, mean) # se relacionan los promedios de Sepal.Width con las espcies
## Species Sepal.Width
## 1 setosa 3.428
## 2 versicolor 2.770
## 3 virginica 2.974
#se pueden relacionar diversas variables indpeendientes con la dependiente mediante
#agreggate y cbind
aggregate(cbind(Sepal.Length,Sepal.Width, Petal.Length, Petal.Width) ~
Species, data=iris, mean)
## Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1 setosa 5.006 3.428 1.462 0.246
## 2 versicolor 5.936 2.770 4.260 1.326
## 3 virginica 6.588 2.974 5.552 2.026
Ejemplos con otra base de datos:
#la base de datos ToothGrowth también se encuentra en la memoria de R
#data("ToothGrowth") #llamñamos base de datos
#View(ToothGrowth) # vemos de manera extendida la base
colnames(ToothGrowth) #vemos los nombres de las columnas
## [1] "len" "supp" "dose"
head(ToothGrowth) #analizamos los primeros datos de cada columna
## len supp dose
## 1 4.2 VC 0.5
## 2 11.5 VC 0.5
## 3 7.3 VC 0.5
## 4 5.8 VC 0.5
## 5 6.4 VC 0.5
## 6 10.0 VC 0.5
dim(ToothGrowth) #obtenemos las dimensiones
## [1] 60 3
?ToothGrowth #pedimos mayor información de la base de datos
mean(ToothGrowth$len) #obtenemos la media de la columna llamada len
## [1] 18.81333
#¿Cuál es el promedio de crecimiento por método de aplicación (var =supp)?
#relaciones mediante la media
aggregate(len~supp, data=ToothGrowth, mean) #longitud del diente con tipo de suplemento
## supp len
## 1 OJ 20.66333
## 2 VC 16.96333
aggregate(len~dose, data=ToothGrowth, mean) #longitud del diente con dosis de suplemento
## dose len
## 1 0.5 10.605
## 2 1.0 19.735
## 3 2.0 26.100
aggregate(len~supp+dose, data=ToothGrowth, mean) #longitud del diente con dosis y tipo de suplemento
## supp dose len
## 1 OJ 0.5 13.23
## 2 VC 0.5 7.98
## 3 OJ 1.0 22.70
## 4 VC 1.0 16.77
## 5 OJ 2.0 26.06
## 6 VC 2.0 26.14
# establecemos números aleatorios
set.seed(15148)
pesos<-rnorm(60,10,2) #le damos una distribución normal a los datos que simulan en peso
peso_dientes<-data.frame(ToothGrowth,pesos=pesos) # agregamos la información
aggregate(cbind(pesos,len)~dose+supp,data=peso_dientes,mean) #relación de la longitud y peso con el tipo de suplemento
## dose supp pesos len
## 1 0.5 OJ 10.024162 13.23
## 2 1.0 OJ 8.305933 22.70
## 3 2.0 OJ 9.195878 26.06
## 4 0.5 VC 9.744000 7.98
## 5 1.0 VC 10.293366 16.77
## 6 2.0 VC 9.481802 26.14
Ejercicio integrador:
Se necesita importar una base datos que está en formato excel (.xlsx)
# se cargan datos
datos9<-read_xlsx("/Users/cristinaalvarez/Desktop/datos_ags_estado_2020.xlsx")
colnames(datos9) #Vemos el nombre de las columnas
## [1] "ENTIDAD" "NOM_ENT" "MUN" "NOM_MUN" "LOC"
## [6] "NOM_LOC" "AGEB" "MZA" "POBTOT" "POBFEM"
## [11] "POBMAS" "P_0A2" "P_0A2_F" "P_0A2_M" "P_3YMAS"
## [16] "P_3YMAS_F" "P_3YMAS_M" "P_5YMAS" "P_5YMAS_F" "P_5YMAS_M"
## [21] "P_12YMAS" "P_12YMAS_F" "P_12YMAS_M" "P_15YMAS" "P_15YMAS_F"
## [26] "P_15YMAS_M" "P_18YMAS" "P_18YMAS_F" "P_18YMAS_M" "P_3A5"
## [31] "P_3A5_F" "P_3A5_M" "P_6A11" "P_6A11_F" "P_6A11_M"
## [36] "P_8A14" "P_8A14_F" "P_8A14_M" "P_12A14" "P_12A14_F"
## [41] "P_12A14_M" "P_15A17" "P_15A17_F" "P_15A17_M" "P_18A24"
## [46] "P_18A24_F" "P_18A24_M" "P_15A49_F" "P_60YMAS" "P_60YMAS_F"
## [51] "P_60YMAS_M" "REL_H_M" "POB0_14" "POB15_64" "POB65_MAS"
## [56] "PROM_HNV" "PNACENT" "PNACENT_F" "PNACENT_M" "PNACOE"
## [61] "PNACOE_F" "PNACOE_M" "PRES2015" "PRES2015_F" "PRES2015_M"
## [66] "PRESOE15" "PRESOE15_F" "PRESOE15_M" "P3YM_HLI" "P3YM_HLI_F"
## [71] "P3YM_HLI_M" "P3HLINHE" "P3HLINHE_F" "P3HLINHE_M" "P3HLI_HE"
## [76] "P3HLI_HE_F" "P3HLI_HE_M" "P5_HLI" "P5_HLI_NHE" "P5_HLI_HE"
## [81] "PHOG_IND" "POB_AFRO" "POB_AFRO_F" "POB_AFRO_M" "PCON_DISC"
## [86] "PCDISC_MOT" "PCDISC_VIS" "PCDISC_LENG" "PCDISC_AUD" "PCDISC_MOT2"
## [91] "PCDISC_MEN" "PCON_LIMI" "PCLIM_CSB" "PCLIM_VIS" "PCLIM_HACO"
## [96] "PCLIM_OAUD" "PCLIM_MOT2" "PCLIM_RE_CO" "PCLIM_PMEN" "PSIND_LIM"
## [101] "P3A5_NOA" "P3A5_NOA_F" "P3A5_NOA_M" "P6A11_NOA" "P6A11_NOAF"
## [106] "P6A11_NOAM" "P12A14NOA" "P12A14NOAF" "P12A14NOAM" "P15A17A"
## [111] "P15A17A_F" "P15A17A_M" "P18A24A" "P18A24A_F" "P18A24A_M"
## [116] "P8A14AN" "P8A14AN_F" "P8A14AN_M" "P15YM_AN" "P15YM_AN_F"
## [121] "P15YM_AN_M" "P15YM_SE" "P15YM_SE_F" "P15YM_SE_M" "P15PRI_IN"
## [126] "P15PRI_INF" "P15PRI_INM" "P15PRI_CO" "P15PRI_COF" "P15PRI_COM"
## [131] "P15SEC_IN" "P15SEC_INF" "P15SEC_INM" "P15SEC_CO" "P15SEC_COF"
## [136] "P15SEC_COM" "P18YM_PB" "P18YM_PB_F" "P18YM_PB_M" "GRAPROES"
## [141] "GRAPROES_F" "GRAPROES_M" "PEA" "PEA_F" "PEA_M"
## [146] "PE_INAC" "PE_INAC_F" "PE_INAC_M" "POCUPADA" "POCUPADA_F"
## [151] "POCUPADA_M" "PDESOCUP" "PDESOCUP_F" "PDESOCUP_M" "PSINDER"
## [156] "PDER_SS" "PDER_IMSS" "PDER_ISTE" "PDER_ISTEE" "PAFIL_PDOM"
## [161] "PDER_SEGP" "PDER_IMSSB" "PAFIL_IPRIV" "PAFIL_OTRAI" "P12YM_SOLT"
## [166] "P12YM_CASA" "P12YM_SEPA" "PCATOLICA" "PRO_CRIEVA" "POTRAS_REL"
## [171] "PSIN_RELIG" "TOTHOG" "HOGJEF_F" "HOGJEF_M" "POBHOG"
## [176] "PHOGJEF_F" "PHOGJEF_M" "VIVTOT" "TVIVHAB" "TVIVPAR"
## [181] "VIVPAR_HAB" "VIVPARH_CV" "TVIVPARHAB" "VIVPAR_DES" "VIVPAR_UT"
## [186] "OCUPVIVPAR" "PROM_OCUP" "PRO_OCUP_C" "VPH_PISODT" "VPH_PISOTI"
## [191] "VPH_1DOR" "VPH_2YMASD" "VPH_1CUART" "VPH_2CUART" "VPH_3YMASC"
## [196] "VPH_C_ELEC" "VPH_S_ELEC" "VPH_AGUADV" "VPH_AEASP" "VPH_AGUAFV"
## [201] "VPH_TINACO" "VPH_CISTER" "VPH_EXCSA" "VPH_LETR" "VPH_DRENAJ"
## [206] "VPH_NODREN" "VPH_C_SERV" "VPH_NDEAED" "VPH_DSADMA" "VPH_NDACMM"
## [211] "VPH_SNBIEN" "VPH_REFRI" "VPH_LAVAD" "VPH_HMICRO" "VPH_AUTOM"
## [216] "VPH_MOTO" "VPH_BICI" "VPH_RADIO" "VPH_TV" "VPH_PC"
## [221] "VPH_TELEF" "VPH_CEL" "VPH_INTER" "VPH_STVP" "VPH_SPMVPI"
## [226] "VPH_CVJ" "VPH_SINRTV" "VPH_SINLTC" "VPH_SINCINT" "VPH_SINTIC"
mean(as.numeric(datos9$POBTOT)) #sacamos promedio de las poblaciones totales con valores numéricos
## [1] 2497.315
#¿cuál es la población total de los 11 municipios?
aggregate(as.numeric(POBTOT)~NOM_MUN, data=datos9, sum) #población total por municipio
## NOM_MUN as.numeric(POBTOT)
## 1 Aguascalientes 901446
## 2 Asientos 17760
## 3 Calvillo 28367
## 4 Cosío 8477
## 5 El Llano 6307
## 6 Jesús María 97524
## 7 Pabellón de Arteaga 35351
## 8 Rincón de Romos 42562
## 9 San Francisco de los Romo 46196
## 10 San José de Gracia 5607
## 11 Tepezalá 9114
aggregate(as.numeric(POBFEM)~NOM_MUN, data=datos9, sum) #población femenina total por municipio
## NOM_MUN as.numeric(POBFEM)
## 1 Aguascalientes 463697
## 2 Asientos 9087
## 3 Calvillo 14561
## 4 Cosío 4410
## 5 El Llano 3219
## 6 Jesús María 49513
## 7 Pabellón de Arteaga 18046
## 8 Rincón de Romos 21748
## 9 San Francisco de los Romo 23331
## 10 San José de Gracia 2972
## 11 Tepezalá 4590
aggregate(as.numeric(POBMAS)~NOM_MUN, data=datos9, sum) #población masculina total por municipio
## NOM_MUN as.numeric(POBMAS)
## 1 Aguascalientes 437749
## 2 Asientos 8673
## 3 Calvillo 13806
## 4 Cosío 4067
## 5 El Llano 3088
## 6 Jesús María 48011
## 7 Pabellón de Arteaga 17305
## 8 Rincón de Romos 20808
## 9 San Francisco de los Romo 22865
## 10 San José de Gracia 2635
## 11 Tepezalá 4524
#¿Cuál es la proporción de mujeres?
tabla1<-aggregate(cbind(as.numeric(POBTOT),as.numeric(POBFEM),as.numeric(POBMAS) )~NOM_MUN,
data=datos9,sum) #ponemos en tabla los totales por municipio de cada población
prop_fem<-tabla1$V2/tabla1$V1 #dividimos las coñumnas que representn la población fememina de la total
tabla2 <- data.frame(tabla1, prop_fem) #agregamos la división a la tabla
tabla2 #mostramos tablafinal con la proporción femenina
## NOM_MUN V1 V2 V3 prop_fem
## 1 Aguascalientes 901446 463697 437749 0.5143924
## 2 Asientos 17760 9087 8673 0.5116554
## 3 Calvillo 28367 14561 13806 0.5133077
## 4 Cosío 8477 4410 4067 0.5202312
## 5 El Llano 6307 3219 3088 0.5103853
## 6 Jesús María 97524 49513 48011 0.5077007
## 7 Pabellón de Arteaga 35351 18046 17305 0.5104806
## 8 Rincón de Romos 42556 21748 20808 0.5110443
## 9 San Francisco de los Romo 46196 23331 22865 0.5050437
## 10 San José de Gracia 5607 2972 2635 0.5300517
## 11 Tepezalá 9114 4590 4524 0.5036208
#De San josé de Gracia, ¿cuál es la población de sus AGEBs urbanos?
datos10 <- subset(datos9, datos9$MUN == "008") #se hace una subase sólo con el municipio de San José de Gracia
aggregate(as.numeric(POBTOT)~AGEB, data=datos10, sum) #se suma el total de población por AGEB
## AGEB as.numeric(POBTOT)
## 1 0164 1095
## 2 0179 1145
## 3 0183 873
## 4 0198 850
## 5 0200 778
## 6 0215 866
#De todos los AGEBs del Estado, ¿Cuál es la prop de mujeres?
tabla3<-aggregate(cbind(as.numeric(POBTOT),as.numeric(AGEB),as.numeric(POBMAS) )~AGEB,
data=datos9,sum) #se realiza la suma poblacional por AGEB
prop_fem<-tabla3$V2/tabla3$V1 #se divide la poblaicón femenina entre la total
tabla4 <- data.frame(tabla3, prop_fem) #se agrega la columna de proporción fememnina
head(tabla4)
## AGEB V1 V2 V3 prop_fem
## 1 0013 1431 13 697 0.009084556
## 2 0017 2237 17 1100 0.007599464
## 3 0020 5053 20 2468 0.003958045
## 4 0028 1812 28 881 0.015452539
## 5 0032 1621 32 770 0.019740901
## 6 0051 5519 102 2755 0.018481609
#Aprox. personas por vivienda en cada municipio
tabla15<-aggregate(cbind(as.numeric(VIVTOT),as.numeric(POBTOT))~NOM_MUN,data=datos9,FUN=sum) #Se realiza la suma poblacional por viviendas
tabla15$Pro_viv<-tabla15$V2/tabla15$V1 #se divide la pobalicón total por el número de viviendas
tabla15
## NOM_MUN V1 V2 Pro_viv
## 1 Aguascalientes 297801 901446 3.027008
## 2 Asientos 5129 17760 3.462663
## 3 Calvillo 9449 28367 3.002117
## 4 Cosío 2450 8477 3.460000
## 5 El Llano 1896 6307 3.326477
## 6 Jesús María 30794 97524 3.166981
## 7 Pabellón de Arteaga 9505 35351 3.719200
## 8 Rincón de Romos 12009 42562 3.544175
## 9 San Francisco de los Romo 16084 46196 2.872171
## 10 San José de Gracia 1903 5607 2.946400
## 11 Tepezalá 2657 9114 3.430184
Rango (máximo - mínimo)
#definimos la función rango asigando instrucciones al comando "function {}"
rango<-function(x) {max(x)-min(x)}
rango(iris3[,1,1]) #activamos la función rango para los valores de Setosa
## [1] 1.5
#es psible aplicar de manera masiva con apply la función nueva "rango"
apply(iris3[,,1],2,mean) #activamos la función mean para comparar el uso
## Sepal L. Sepal W. Petal L. Petal W.
## 5.006 3.428 1.462 0.246
apply(iris3[,,1],2,rango)
## Sepal L. Sepal W. Petal L. Petal W.
## 1.5 2.1 0.9 0.5
apply(iris3[,,1],1,rango)
## [1] 4.9 4.7 4.5 4.4 4.8 5.0 4.3 4.8 4.2 4.8 5.2 4.6 4.7 4.2 5.6 5.3 5.0 4.8 5.4
## [20] 4.8 5.2 4.7 4.4 4.6 4.6 4.8 4.6 5.0 5.0 4.5 4.6 5.0 5.1 5.3 4.7 4.8 5.3 4.8
## [39] 4.2 4.9 4.7 4.2 4.2 4.4 4.7 4.5 4.9 4.4 5.1 4.8
#es psible aplicar de manera masiva con aggregate la función nueva "rango"
aggregate(cbind(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width)~Species,
data=iris,mean) #para comparar sacamos la media
## Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1 setosa 5.006 3.428 1.462 0.246
## 2 versicolor 5.936 2.770 4.260 1.326
## 3 virginica 6.588 2.974 5.552 2.026
aggregate(cbind(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width)~Species,
data=iris,rango) #activamos rango con aggregate
## Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1 setosa 1.5 2.1 0.9 0.5
## 2 versicolor 2.1 1.4 2.1 0.8
## 3 virginica 3.0 1.6 2.4 1.1
Coeficiente de variabilidad = sigma/abs(media)
coef_var<-function(x){sd(x)/abs(mean(x))} # se denota la función
apply(iris3[,,1],2,coef_var) # se utiliza la función de coeficiente de variabilidad como función para aplicra de manera masica a la dimensión de la setosa
## Sepal L. Sepal W. Petal L. Petal W.
## 0.07041344 0.11057887 0.11878522 0.42839670
aggregate(cbind(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width)~Species,
data=iris,coef_var) #se realiza relacionan todas las columnas con las especias mediante el coeficiente de varibailidad
## Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1 setosa 0.07041344 0.1105789 0.11878522 0.4283967
## 2 versicolor 0.08695606 0.1132846 0.11030774 0.1491348
## 3 virginica 0.09652089 0.1084387 0.09940466 0.1355627
Otras funciones:
#se nombra como "corte dos" a la función que nos arroja el valor promedio mayor
corte_dos<-function(w){
longi<-length(w)
posis_quit<-c(1,2,longi-1,longi)
ordenado<-sort(w,decreasing=TRUE)
mean(w[-posis_quit]) }
corte_dos(iris[,4])
## [1] 1.20137
tarea <-function(w){
#1 promedio
N <- mean(w)
print(paste0("primer promedio ", N))
#2 elegir valores
resta <- (w - N)
distancia <- (abs(resta))
minimo <- min(distancia)
valores <- subset(w, distancia== minimo)
#3 quitar valores
data_1 <- subset(w, w != valores)
#4 sacar otra vez media
P<-mean(data_1)
#mostrar valor
print(paste0("segundo promedio ", P))}
tarea(iris$Sepal.Length)
## [1] "primer promedio 5.84333333333333"
## [1] "segundo promedio 5.84545454545455"
tarea(iris$Sepal.Width)
## [1] "primer promedio 3.05733333333333"
## [1] "segundo promedio 3.05395683453237"
Se utlizan funciones perzonalizadas, retun() y paste0()
#Ingreso de una tabla (descomponerla, o sacar correlaciones)
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
eigen(cor(iris[, -5]))
## eigen() decomposition
## $values
## [1] 2.91849782 0.91403047 0.14675688 0.02071484
##
## $vectors
## [,1] [,2] [,3] [,4]
## [1,] 0.5210659 -0.37741762 0.7195664 0.2612863
## [2,] -0.2693474 -0.92329566 -0.2443818 -0.1235096
## [3,] 0.5804131 -0.02449161 -0.1421264 -0.8014492
## [4,] 0.5648565 -0.06694199 -0.6342727 0.5235971
#se denota la funicón para descompnerla por sus eigenvalores
descomposi <- function (w){
return(eigen(cor(w))$vector)
}
#se activa la función para valores de iris3
descomposi(iris3[,,1])
## [,1] [,2] [,3] [,4]
## [1,] 0.6044164 0.3349908 -0.0673598261 0.71966982
## [2,] 0.5756194 0.4408461 -0.0007138239 -0.68870645
## [3,] 0.3754348 -0.6269717 -0.6770628102 -0.08683986
## [4,] 0.4029788 -0.5480350 0.7328356536 -0.01475204
#respuestas al sistema de ecuaciones
#parametros
coef2<-matrix(c(5,-3,-1,1,4,-6,2,3,4),ncol=3,byrow=TRUE)
resp2<-c(1,-1,9)
#se denota función con return
res_ecua3<-function(x,y){
solucion<-solve(x,y)
return(cat("La solución al sistema es: x=", solucion[1],"\n",
"La solución al sistema es: y=",solucion[2],"\n",
"La solución al sistema es: z=",solucion[3]))
}
res_ecua3(y=resp2,x=coef2)
## La solución al sistema es: x= 1
## La solución al sistema es: y= 1
## La solución al sistema es: z= 1
La información puede tener formato de fecha, para que R la lea como tal entonces, debemos eindicarlo con la función strptime() o as.Date() siempre alineados a los formartos posibles de fechas.
#cargamos bases
library(readr)
library(lubridate)
fallecidos_oaxaca <- read.csv("/Users/cristinaalvarez/Desktop/fallecidos.csv")
covid_oaxaca <-read.csv("/Users/cristinaalvarez/Desktop/covid_oaxaca.csv")
#Formato fechas
#Cuando la fecha no tiene hora se puede manejar como as.date
#Cuando se agrega fecha + hora = strptime (string que refiere a tiempo)
head(funcionas2<-as.Date(covid_oaxaca$FECHA_INGRESO,format="%Y-%m-%d"))
## [1] "2020-04-06" "2020-03-31" "2020-04-04" "2020-03-27" "2020-03-26"
## [6] "2020-03-30"
head(funcionas3<-as.Date(covid_oaxaca$FECHA_SINTOMAS,format="%Y-%m-%d"))
## [1] "2020-03-26" "2020-03-26" "2020-03-28" "2020-03-26" "2020-03-20"
## [6] "2020-03-29"
head(funcionas2-funcionas3)
## Time differences in days
## [1] 11 5 7 1 6 1
head(day(funcionas2)) #extraemos el día
## [1] 6 31 4 27 26 30
En el presente ejercicio se realizan las transformaciones a fechas de los datos y se responden a la pregunta:
¿cuándo es menor la temperatura promedio, entre 3am y 6am, o 10pm y 11:59pm
##### DATOS BOSQUE HARVDAD
library(lubridate)
bosque <- read.csv("/Users/cristinaalvarez/Desktop/Datos bosque Harvard.csv")
head(bosque) #vemos primera entradas
## datetime jd airt f.airt rh f.rh dewp f.dewp prec f.prec slrr f.slrr
## 1 2005-01-01T00:15 1 5.1 84 2.5 0 0
## 2 2005-01-01T00:30 1 5.0 84 2.5 0 0
## 3 2005-01-01T00:45 1 4.9 85 2.6 0 0
## 4 2005-01-01T01:00 1 4.7 86 2.6 0 0
## 5 2005-01-01T01:15 1 4.5 87 2.6 0 0
## 6 2005-01-01T01:30 1 4.6 87 2.7 0 0
## parr f.parr netr f.netr bar f.bar wspd f.wspd wres f.wres wdir f.wdir wdev
## 1 0 -58 1017 2.6 2.4 205 26
## 2 0 -59 1017 2.3 2.1 213 25
## 3 0 -59 1017 2.1 1.8 217 27
## 4 0 -58 1017 1.8 1.6 226 26
## 5 0 -58 1017 1.4 1.2 224 29
## 6 0 -58 1017 1.6 1.4 214 30
## f.wdev gspd f.gspd s10t f.s10t
## 1 7.2 0.7
## 2 5.9 0.7
## 3 5.8 0.7
## 4 5.1 0.7
## 5 4.6 0.7
## 6 4.4 0.7
dim(bosque) # vemos dimensión de la base
## [1] 584352 30
#extrae el texto de la pocisión 1 a la 5 del elemento 1 de la columna datetime
substr(bosque$datetime[1], 1, 5)
## [1] "2005-"
fechax <-substr(bosque$datetime[1], 1, 10) #extracto de fecha
horax <-substr(bosque$datetime[1], 12, 16) #extracto de fecha
hora_fechx<- paste0(fechax, " ", horax) #se conjunta el formato de fecha
strsplit(bosque$datetime[1],"T")
## [[1]]
## [1] "2005-01-01" "00:15"
hora_fechaxx<-strptime(hora_fechx, format="%Y-%m-%d %H:%M")
head(hour(hora_fechaxx)) #asilo hora de la fecha
## [1] 0
#Hagan una función (function)... que transforme
# 2005-01-01T00:15 a uno de tipo strptime
fechaxxx <- function(w){
fecha<-(substr(w, 1, 10))
strptime(fecha, format="%Y-%m-%d")}
head(fechaxxx(bosque$datetime))
## [1] "2005-01-01 CST" "2005-01-01 CST" "2005-01-01 CST" "2005-01-01 CST"
## [5] "2005-01-01 CST" "2005-01-01 CST"
trans_fecha<-function(dia_fecha){
fechax<-substr(dia_fecha,1,10)
horax<-substr(dia_fecha,12,16)
hora_fechx<-paste0(fechax," ",horax)
return(hora_fechx)
}
#coniverto toda la base a formato fecha
head(trans_fecha(bosque$datetime))
## [1] "2005-01-01 00:15" "2005-01-01 00:30" "2005-01-01 00:45" "2005-01-01 01:00"
## [5] "2005-01-01 01:15" "2005-01-01 01:30"
head(sapply(bosque$datetime,FUN = trans_fecha)) #A elementos, no de tablas
## 2005-01-01T00:15 2005-01-01T00:30 2005-01-01T00:45 2005-01-01T01:00
## "2005-01-01 00:15" "2005-01-01 00:30" "2005-01-01 00:45" "2005-01-01 01:00"
## 2005-01-01T01:15 2005-01-01T01:30
## "2005-01-01 01:15" "2005-01-01 01:30"
datetime2 <- trans_fecha(bosque$datetime)
bosque$datetime22<-datetime2
#Temperatura promedio en dich bosque en los meses
#Enero =2ºC
#Fecbrero = 4ºC
head(month(bosque$datetime))
## [1] 1 1 1 1 1 1
head(month(bosque$datetime22[10000]))
## [1] 4
is.numeric(bosque$airt)
## [1] TRUE
head(bosque$mes_registro<-month(bosque$datetime22))
## [1] 1 1 1 1 1 1
bosque$year_registro<-year(bosque$datetime22)
head(aggregate(airt~mes_registro, FUN = mean, data=bosque))
## mes_registro airt
## 1 1 -4.4354325
## 2 2 -3.5182661
## 3 3 0.7246007
## 4 4 7.2847304
## 5 5 13.3104319
## 6 6 17.9437049
head(aggregate(airt~year_registro,FUN = mean,data=bosque))
## year_registro airt
## 1 2005 8.098615
## 2 2006 8.971521
## 3 2007 7.848312
## 4 2008 7.988106
## 5 2009 7.630917
## 6 2010 9.025195
#¿cuándo es menor la temperatura promedio, entre 3am y 6am, o 10pm y 11:59pm?
bosque$hora<-hour(bosque$datetime22)
bosque_1<-subset(bosque, bosque$hora>= 3 & bosque$hora<=6)
is.numeric(bosque_1$airt)
## [1] TRUE
c<-mean(bosque_1$airt, na.rm=TRUE)
bosque_2<-subset(bosque, bosque$hora>= 22 & bosque$hora<=23)
is.numeric(bosque_2$airt)
## [1] TRUE
c_2<-mean(bosque_2$airt, na.rm=TRUE)
#La temperatura entre 3 y 5:59 es más baja
DATOS COVID 5 ESTADOS
Emparejamiento de bases con categoría de entidad federativa
datos_covid20 <- read.csv("/Users/cristinaalvarez/Desktop/COVID2020_5estados.csv")
catalo_enti <- read_excel("/Users/cristinaalvarez/Desktop/201128 CatalogoS.xlsx", sheet = "Catálogo de ENTIDADES")
tail(catalo_enti)
## # A tibble: 6 x 3
## CLAVE_ENTIDAD ENTIDAD_FEDERATIVA ABREVIATURA
## <dbl> <chr> <chr>
## 1 31 YUCATÁN YN
## 2 32 ZACATECAS ZS
## 3 36 ESTADOS UNIDOS MEXICANOS EUM
## 4 97 NO APLICA NA
## 5 98 SE IGNORA SI
## 6 99 NO ESPECIFICADO NE
head(datos_covid20$ENTIDAD_UM)
## [1] 3 3 2 3 1 1
head(catalo_enti$CLAVE_ENTIDAD)
## [1] 1 2 3 4 5 6
empate_estadoUM<-merge(datos_covid20,catalo_enti,by.x="ENTIDAD_UM",by.y="CLAVE_ENTIDAD")
dim(empate_estadoUM)
## [1] 149564 41
dim(datos_covid20) #Tablas, su dimensión
## [1] 149564 39
Emparejamiento de bases con categorías de sexo
catalo_sexo <- read_excel("/Users/cristinaalvarez/Desktop/201128 Catalogos.xlsx", sheet = "Catálogo SEXO")
empate_estadoUM2<-merge(x=empate_estadoUM,y=catalo_sexo,by.x="SEXO",by.y="CLAVE",sort=FALSE)
dim(empate_estadoUM2)
## [1] 149564 42
###proporción de mujeres con covid en cada estado?
table(empate_estadoUM2$DESCRIPCIÓN, empate_estadoUM2$ENTIDAD_FEDERATIVA)
##
## AGUASCALIENTES BAJA CALIFORNIA BAJA CALIFORNIA SUR CAMPECHE
## HOMBRE 16138 29342 16162 11145
## MUJER 18606 32378 17365 8428
table(empate_estadoUM2$DESCRIPCIÓN, empate_estadoUM2$SEXO)
##
## 1 2
## HOMBRE 0 72787
## MUJER 76777 0
###proporción de mujeres con covid en cada estado? tarea con respecto a hombres
table(empate_estadoUM2$DESCRIPCIÓN, empate_estadoUM2$SEXO)
##
## 1 2
## HOMBRE 0 72787
## MUJER 76777 0
POBTOT <- (149564)
POB_FEM <- (76777)
prop_fem<-((POB_FEM/POBTOT)*100 )
prop_fem<- round((prop_fem), 0)
tablasss<-table(empate_estadoUM2$ENTIDAD_FEDERATIVA,empate_estadoUM2$SEXO)
table(empate_estadoUM2$ENTIDAD_FEDERATIVA,empate_estadoUM2$INTUBADO)
##
## 1 2 97 99
## AGUASCALIENTES 624 3642 30269 209
## BAJA CALIFORNIA 1943 9196 50206 375
## BAJA CALIFORNIA SUR 434 2273 30628 192
## CAMPECHE 338 2649 16564 22
rownames(tablasss)
## [1] "AGUASCALIENTES" "BAJA CALIFORNIA" "BAJA CALIFORNIA SUR"
## [4] "CAMPECHE"
####merge anidado
empate_estadoUM2<-merge(x=empate_estadoUM,y=catalo_sexo,by.x="SEXO",by.y="CLAVE",sort=FALSE)
catalo_muni <- read_excel("/Users/cristinaalvarez/Desktop/201128 Catalogos.xlsx", sheet = "Catálogo MUNICIPIOS")
head(merge(datos_covid20,catalo_enti,by.x = "ENTIDAD_UM",by.y="CLAVE_ENTIDAD",all.x=TRUE, sort = FALSE))
## ENTIDAD_UM X FECHA_ACTUALIZACION ID_REGISTRO ORIGEN SECTOR SEXO
## 1 3 5 2020-10-28 016eda 2 12 1
## 2 3 18 2020-10-28 002371 1 4 2
## 3 3 815907 2020-10-28 0230b3 2 12 1
## 4 3 36 2020-10-28 1326e5 1 4 2
## 5 3 2174118 2020-10-28 246614 2 12 1
## 6 3 447822 2020-10-28 13bbe5 1 6 2
## ENTIDAD_NAC ENTIDAD_RES MUNICIPIO_RES TIPO_PACIENTE FECHA_INGRESO
## 1 14 3 8 1 2020-03-30
## 2 3 3 8 1 2020-03-31
## 3 25 3 8 1 2020-09-02
## 4 3 3 8 1 2020-04-02
## 5 9 3 8 1 2020-10-24
## 6 14 3 3 1 2020-04-16
## FECHA_SINTOMAS FECHA_DEF INTUBADO NEUMONIA EDAD NACIONALIDAD EMBARAZO
## 1 2020-03-23 9999-99-99 97 2 29 1 2
## 2 2020-03-27 9999-99-99 97 2 38 1 97
## 3 2020-08-28 9999-99-99 97 2 40 1 2
## 4 2020-03-27 9999-99-99 97 2 60 1 97
## 5 2020-10-20 9999-99-99 97 2 32 1 2
## 6 2020-04-14 9999-99-99 97 2 44 1 97
## HABLA_LENGUA_INDIG INDIGENA DIABETES EPOC ASMA INMUSUPR HIPERTENSION OTRA_COM
## 1 2 2 2 2 2 2 2 2
## 2 2 2 2 2 2 2 2 2
## 3 2 2 2 2 2 2 2 2
## 4 2 2 2 2 2 2 2 2
## 5 2 2 2 2 2 2 2 2
## 6 2 2 2 2 2 2 2 2
## CARDIOVASCULAR OBESIDAD RENAL_CRONICA TABAQUISMO OTRO_CASO TOMA_MUESTRA
## 1 2 2 2 2 1 1
## 2 2 2 2 2 99 1
## 3 2 2 2 2 2 1
## 4 2 2 2 2 99 1
## 5 2 2 2 2 1 1
## 6 2 2 1 2 1 1
## RESULTADO_LAB CLASIFICACION_FINAL MIGRANTE PAIS_NACIONALIDAD PAIS_ORIGEN UCI
## 1 1 3 99 México 97 97
## 2 1 3 99 México 97 97
## 3 1 3 99 México 97 97
## 4 1 3 99 México 97 97
## 5 2 7 99 México 97 97
## 6 2 7 99 México 97 97
## ENTIDAD_FEDERATIVA ABREVIATURA
## 1 BAJA CALIFORNIA SUR BS
## 2 BAJA CALIFORNIA SUR BS
## 3 BAJA CALIFORNIA SUR BS
## 4 BAJA CALIFORNIA SUR BS
## 5 BAJA CALIFORNIA SUR BS
## 6 BAJA CALIFORNIA SUR BS
#all.x=TRUE te agrega vaolores con NA si no existe con que emparejar
#all.x= FLASE no te lo agrega
#sort acomoda
tabla_munic<-merge(datos_covid20,catalo_muni,by.x=c("ENTIDAD_RES","MUNICIPIO_RES"),
by.y=c("CLAVE_ENTIDAD","CLAVE_MUNICIPIO"))
colnames(tabla_munic)
## [1] "ENTIDAD_RES" "MUNICIPIO_RES" "X"
## [4] "FECHA_ACTUALIZACION" "ID_REGISTRO" "ORIGEN"
## [7] "SECTOR" "ENTIDAD_UM" "SEXO"
## [10] "ENTIDAD_NAC" "TIPO_PACIENTE" "FECHA_INGRESO"
## [13] "FECHA_SINTOMAS" "FECHA_DEF" "INTUBADO"
## [16] "NEUMONIA" "EDAD" "NACIONALIDAD"
## [19] "EMBARAZO" "HABLA_LENGUA_INDIG" "INDIGENA"
## [22] "DIABETES" "EPOC" "ASMA"
## [25] "INMUSUPR" "HIPERTENSION" "OTRA_COM"
## [28] "CARDIOVASCULAR" "OBESIDAD" "RENAL_CRONICA"
## [31] "TABAQUISMO" "OTRO_CASO" "TOMA_MUESTRA"
## [34] "RESULTADO_LAB" "CLASIFICACION_FINAL" "MIGRANTE"
## [37] "PAIS_NACIONALIDAD" "PAIS_ORIGEN" "UCI"
## [40] "MUNICIPIO"
head(table(tabla_munic$MUNICIPIO))
##
## ABASOLO ABEJONES ACAMBAY DE RUÍZ CASTAÑEDA
## 1 1 5
## ACAPONETA ACAPULCO DE JUÁREZ ACATIC
## 1 6 5
head(datos_covid20)
## X FECHA_ACTUALIZACION ID_REGISTRO ORIGEN SECTOR ENTIDAD_UM SEXO ENTIDAD_NAC
## 1 5 2020-10-28 016eda 2 12 3 1 14
## 2 18 2020-10-28 002371 1 4 3 2 3
## 3 35 2020-10-28 081e3e 1 4 2 1 2
## 4 36 2020-10-28 1326e5 1 4 3 2 3
## 5 37 2020-10-28 0fac67 2 12 1 2 11
## 6 41 2020-10-28 193721 2 12 1 2 99
## ENTIDAD_RES MUNICIPIO_RES TIPO_PACIENTE FECHA_INGRESO FECHA_SINTOMAS
## 1 3 8 1 2020-03-30 2020-03-23
## 2 3 8 1 2020-03-31 2020-03-27
## 3 2 2 2 2020-03-30 2020-03-29
## 4 3 8 1 2020-04-02 2020-03-27
## 5 1 1 1 2020-03-22 2020-03-18
## 6 1 6 1 2020-03-27 2020-03-26
## FECHA_DEF INTUBADO NEUMONIA EDAD NACIONALIDAD EMBARAZO HABLA_LENGUA_INDIG
## 1 9999-99-99 97 2 29 1 2 2
## 2 9999-99-99 97 2 38 1 97 2
## 3 2020-04-19 2 1 62 1 2 2
## 4 9999-99-99 97 2 60 1 97 2
## 5 9999-99-99 97 2 48 1 97 2
## 6 9999-99-99 97 2 79 2 97 2
## INDIGENA DIABETES EPOC ASMA INMUSUPR HIPERTENSION OTRA_COM CARDIOVASCULAR
## 1 2 2 2 2 2 2 2 2
## 2 2 2 2 2 2 2 2 2
## 3 2 2 1 2 2 1 2 2
## 4 2 2 2 2 2 2 2 2
## 5 2 2 2 2 2 2 2 2
## 6 2 2 2 2 2 2 2 2
## OBESIDAD RENAL_CRONICA TABAQUISMO OTRO_CASO TOMA_MUESTRA RESULTADO_LAB
## 1 2 2 2 1 1 1
## 2 2 2 2 99 1 1
## 3 2 1 1 99 1 1
## 4 2 2 2 99 1 1
## 5 2 2 2 1 1 1
## 6 2 2 2 1 1 1
## CLASIFICACION_FINAL MIGRANTE PAIS_NACIONALIDAD PAIS_ORIGEN UCI
## 1 3 99 México 97 97
## 2 3 99 México 97 97
## 3 3 99 México 97 2
## 4 3 99 México 97 97
## 5 3 99 México 97 97
## 6 3 99 Cuba 97 97