ÍNDICE

  1. ARREGLOS DE DATOS

1.1 INSTRUCCIONES BÁSICAS

1.2 VECTORES

1.3 MATRICES

1.4 OPERACIONES VECTORIALES Y MATRICIALES

  1. CONTROLES DE FLUJO

2.1 TIPOS DE DATOS

2.2 MARCOS DE DATOS

2.3 LISTAS

2.4 FUNCIONES

2.5 OPERACIONES CON FUNCIONES

2.6 EJERCICIO DATOS INEGI CENSO 2020_AGUASCALINTES

2.7 FUNCIONES PERSONALIZADAS

2.8 EJERCICIO MENOS VALOR CERCANO AL PROMEDIO

2.9 EJERCICIO

  1. MANEJO DE BASES DE DATOS

3.1 FORMATO DE FECHAS

3.2 EJERCICIO DATOS BOSQUE HARVARD

3.3 EMPAJERAMIENTO DE DATOS

3.4 EMPAJERAMIENTO ANIDADO DE DATOS

1. ARREGLOS DE DATOS

1.1 INSTRUCCIONES BÁSICAS

De principio es importante concocer el ambiente de trabajo en R-studio:

  1. Ventana de script arriba izquierda

  2. Consola de acciones abajo izquierda

  3. Ambiente de varibales arriba derecha

  4. 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

1.2 VECTORES

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

1.3 MATRICES

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

1.4 OPERACIONES VECTORIALES Y MATRICIALES

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

2. CONTROLES DE FLUJO

2.1 TIPO DE DATOS

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"

2.2 MARCOS DE DATOS

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

2.3 LISTAS

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"

2.4 FUNCIONES

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

2.5 OPERACIONES CON FUNCIONES

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

2.6 EJERCICIO DATOS INEGI CENSO 2020_AGUASCALINTES

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

2.7 FUNCIONES PERSONALIZADAS

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

2.8 EJERCICIO MENOS VALOR CERCANO AL PROMEDIO

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"

2.9 EJERCICIO

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

3. MANEJO DE BASES DE DATOS

3.1 FORMATO DE FECHAS

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

3.2 EJERCICIO DATOS BOSQUE HARVARD

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

3.3 EMPAJERAMIENTO DE DATOS

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"

3.4 EMPAJERAMIENTO ANIDADO DE DATOS

####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