Manejo de Bases de Datos y programación (R + STATA)

Actividad 2

R

Básicos de R

Comándos básicos

# Esto es un comentario

#Sentencias = azul
#Errores o warnings = rojo
#Resultados = negro

# Correr instrucciones Ctrl + Enter o "Run"

2+2 #Toda la línea = situado en línea
## [1] 4
#Color azul en consola  = todo bien. Ejemplo:
5-3
## [1] 2
3-9
## [1] -6
3*8 # * es multiplicación "escalar"
## [1] 24
3^2
## [1] 9
### Asignación de nombres a variables, tablas, etc.

# <-  Operador de asignación. Ejemplo:
xyy<-6

zzz<-xyy/5


## Encontrar ayuda de funciones

?rnorm
?seq

##  Comando para encontrar funciones o comandos con información incompleta 

apropos("norm")
##  [1] "dlnorm"        "dnorm"         "norm"          "normalizePath"
##  [5] "plnorm"        "pnorm"         "qlnorm"        "qnorm"        
##  [9] "qqnorm"        "rlnorm"        "rnorm"

Bases de datos

Dependiendo del tipo de archivo, podremos simplemente importar la base desde “File, Import Dataset” o hacer uso de alguna de las funciones read.csv, read.xlsx. En el segundo caso, especificamos la ubicación/ ruta completa del archivo en nuestra computadora.

#arreglado<-read.csv("/Users/mac/Downloads/SSNMX_catalogo_19800101_20210924 arreglado.csv")

Es posible especificar aquí qué hoja y como tratar missing values.

#read_excel("ubicación", sheet= "Hoja1", range= "A1:HV481", na= c("*","N/D")) ## 

Expresiones trigonométricas

sin(0.5)
## [1] 0.4794255
cos(0.5)
## [1] 0.8775826
exp(2.1)
## [1] 8.16617
log(2.5)
## [1] 0.9162907
log(xyy)
## [1] 1.791759

Vectores

## Crear secuencias 

secu<-seq(0.5,7.5,0.5)

vect4<-seq(from=10,to=40,by=10) #longitud 4

vect5<-rep(5,6) #rep =repetir

vect6<-rep(vect4,4)

vect7<-rep(vect4,each=4)

# [] Posiciones

# () Arg de función, u operaciones

## Crear vectores

vect1<-15
vect2<-18

#c previo a un conjunto implica concatenar elementos

vect3<-c(vect1,vect2,20,24) 

# Longitud de un vector

length(vect7) 
## [1] 16
# Dimension de un vector 

dim_vec<-length(vect4)

ls() # te recuerda todas las variables que has creado 
##  [1] "dim_vec" "secu"    "vect1"   "vect2"   "vect3"   "vect4"   "vect5"  
##  [8] "vect6"   "vect7"   "xyy"     "zzz"
#rm(list = c("vect2", "xyy")) #remover una variable o varias 

#rm(list = ls()) #elimina todos los elementos de ls 

#Otra forma de borrar es al ir a Data, cambiar a vista "grid" y borrar alguna seleccionada

Listas

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")

matriz12<-data.frame(Vector=as.numeric(vect6[1:13]),
                     Vector2=as.factor(vari3),
                     Vector3=as.numeric(vect7[1:13]),
                     Vector4=as.factor(vari2))


casa<-list(Mensaje="Hola mundo en la lista",
           Vector=vari1,
           Matriz=matriz12)
is.list(casa)
## [1] TRUE
is.list(matriz12)
## [1] TRUE
## llamar elementos 

#matriz12[i,j]
#vector[i]
#lista[i,j,k]#

casa$Mensaje ##llamar elementos de una lista
## [1] "Hola mundo en la lista"

Estadísticas

#solve #mean #sd #var #max #min 

#mean(practi_mat3)
#min(practi_mat3[,2]) ## valor mínimo 

Matrices

# OPERACIONES VECTORIALES Y MATRICIALES 

#Operaciones "punto" por vector (escalar por el vector)

5* vect3 
## [1]  75  90 100 120
vect1 *vect3 
## [1] 225 270 300 360
##[fila,columna] Matriz 5x4 

practi<-c(5,7,3,9,7,12,6,7)
practi
## [1]  5  7  3  9  7 12  6  7
#matrix  

practi_mat<-matrix(practi,ncol=4, byrow = TRUE) #BYROW = llenado por filas y no por columnas
practi_mat2<- matrix(practi,nrow=4)
practi_mat2
##      [,1] [,2]
## [1,]    5    7
## [2,]    7   12
## [3,]    3    6
## [4,]    9    7
practi_mat2<-matrix(practi_mat2,nrow = 4,byrow = TRUE)

dim(practi_mat) # Nª rows, columns
## [1] 2 4
practi_mat
##      [,1] [,2] [,3] [,4]
## [1,]    5    7    3    9
## [2,]    7   12    6    7
practi_mat3<-matrix(c(11,13,2,5,8,4,7,12,21,21,6,8),
                   ncol=4, byrow = TRUE) #BYROW = llenado por filas y no por columnas

3*practi_mat3
##      [,1] [,2] [,3] [,4]
## [1,]   33   39    6   15
## [2,]   24   12   21   36
## [3,]   63   63   18   24
## Indicadores de posición (matriz y vector)

practi_mat3[1,3]
## [1] 2
#Todos los renglones 

practi_mat3 [,3]
## [1] 2 7 6
#Todas las columnas 

practi_mat3[2,]
## [1]  8  4  7 12
##Fila 1 y 2, todas las columnas 

practi_mat3[1:2,]
##      [,1] [,2] [,3] [,4]
## [1,]   11   13    2    5
## [2,]    8    4    7   12
##columna 1 y 2, todas las filas 

practi_mat3[,1:2]
##      [,1] [,2]
## [1,]   11   13
## [2,]    8    4
## [3,]   21   21
##resta la primera columna/ fila 

practi_mat3[-1,-1]
##      [,1] [,2] [,3]
## [1,]    4    7   12
## [2,]   21    6    8
practi_mat3[c(1,3),] #te despliega solo las filas indicadas
##      [,1] [,2] [,3] [,4]
## [1,]   11   13    2    5
## [2,]   21   21    6    8
practi_mat3[-c(1,3),] #elimina las filas indicadas
## [1]  8  4  7 12
practi_mat3[-c(2,3),c(1,3)]
## [1] 11  2

Álgebra de matrices

library(matlib)

## Transponer una matriz 

t(practi_mat3)
##      [,1] [,2] [,3]
## [1,]   11    8   21
## [2,]   13    4   21
## [3,]    2    7    6
## [4,]    5   12    8
#inversa de la matriz

#inv(practi_mat)

#solve (matriz) 

##hacer cuadrada la matriz. No es posible usar el comando solve si la matriz no es cuadrada.

practi_mat4<-practi_mat3[,-4 ]

solve(practi_mat4)
##            [,1]       [,2]       [,3]
## [1,] -1.2058824 -0.3529412  0.8137255
## [2,]  0.9705882  0.2352941 -0.5980392
## [3,]  0.8235294  0.4117647 -0.5882353
## usar %*% para multiplicar matrices 

##matriz por su inversa = identidad 


##sistema de ecuaciones


#5x-3y+2z=1
#-2x+2y-z=5 
#4x+2y-4z=-3

coeficientes<-matrix(c(5,-3,2,-2,2,-1,4,2,-4),byrow=TRUE,ncol = 3)
respuestas<-c(1,5,-3)

ainv<-solve(coeficientes) #inversa de la matriz
solucion<-solve(coeficientes,respuestas) #resuelve la matriz

solve(coeficientes)
##           [,1]      [,2]        [,3]
## [1,] 0.3333333 0.4444444  0.05555556
## [2,] 0.6666667 1.5555556 -0.05555556
## [3,] 0.6666667 1.2222222 -0.22222222
#Intentemos x=b*a`-1. (a`=inversa)

#para el caso de matrices, el orden afecta el producto 

respuestas%*% ainv
##          [,1]     [,2]      [,3]
## [1,] 1.666667 4.555556 0.4444444
ainv%*% respuestas #arroja la respuesta al sistema de ecuaciones
##          [,1]
## [1,] 2.388889
## [2,] 8.611111
## [3,] 7.444444
#suma de matrices 

(coeficientes + practi_mat4)%*% solve((coeficientes + practi_mat4))# matriz identidad 
##               [,1] [,2]          [,3]
## [1,]  1.000000e+00    0  2.775558e-17
## [2,] -2.775558e-17    1 -1.110223e-16
## [3,] -8.326673e-17    0  1.000000e+00
diag(coeficientes) # extrae la diagonal de la matriz
## [1]  5  2 -4
det(coeficientes) # determinante de la matriz
## [1] -18
cbind(coeficientes, coeficientes[,1:2]) # ejemplo de los primeros pasos para obtener el determinante mediante una matriz extendida
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    5   -3    2    5   -3
## [2,]   -2    2   -1   -2    2
## [3,]    4    2   -4    4    2
cbind# pegar por columnas 
## function (..., deparse.level = 1) 
## .Internal(cbind(deparse.level, ...))
## <bytecode: 0x7fce523bbc90>
## <environment: namespace:base>
rbind(coeficientes, coeficientes[1:2,]) #pegar por fila
##      [,1] [,2] [,3]
## [1,]    5   -3    2
## [2,]   -2    2   -1
## [3,]    4    2   -4
## [4,]    5   -3    2
## [5,]   -2    2   -1

Generar marcos de datos numéricos, no numéricos y mixtos

##Practicar el unir tablas /vectores del mismo tipo 

vect4<-seq(from=10,to=40,by=10) #longitud 4
vect6<-rep(vect4,4)
vect7<-rep(vect4,each=4)

matriz7<-cbind(vect6,vect7)
dim(matriz7)
## [1] 16  2
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)

matriz9<-cbind(vect6[1:13],vari2) #convirtió la matriz en no numérica por tener un extracto no numérico


##Generar marcos de datos numéricos, no numéricos y mixtos 

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
data.frame(Vector= as.numeric(vect6[1:13]), Vector2=as.numeric(vari3))#un vector que tiene caracteres numéricos y no numéricos convierte en NA a los caracteres
##    Vector Vector2
## 1      10       1
## 2      20       0
## 3      30       1
## 4      40       0
## 5      10       0
## 6      20       1
## 7      30       1
## 8      40       1
## 9      10       1
## 10     20       0
## 11     30       0
## 12     40       0
## 13     10       1
matriz11<-data.frame(Vector= as.numeric(vect6[1:13]), Vector2=as.factor(vari3))#un vector que tiene caracteres numéricos y no numéricos convierte en NA a los caracteres
matriz12<-data.frame(Vector=as.numeric(vect6[1:13]),
                     Vector2=as.factor(vari3),
                     Vector3=as.numeric(vect7[1:13]),
                     Vector4=as.factor(vari2))

Ejemplo

Queremos tabular las ganancias que dos restaurantes han obtenido durante los meses de enero, febrero y marzo y desagregarlo por comida, cena y desayuno.

## a) Definir la matriz del primer restaurante 

rest_1<- matrix(c(2800, 3000, 2000, 5500, 6000, 3300, 3500, 4500, 3500),3,3, byrow=F)

# class() te dice que tipo de objeto tenemos

class(rest_1) 
## [1] "matrix" "array"
#asignamos nombres a cada columna 

colnames(rest_1)<-c("desayuno","comida","cena")

rownames(rest_1)<-c("enero","febrero","marzo")

## b) Definir la matriz del segundo restaurante 


rest_2<- matrix(c(2000, 4200, 3000, 3000, 5000, 3400,1500,2800,3100),3,3,byrow = T)

colnames(rest_2)<-c("desayuno","comida","cena")

rownames(rest_2)<-c("enero","febrero","marzo")

## e) 

ganancia_febrero<- rest_2 ["febrero",]+ rest_1[2,]

rest_1["febrero,"] # como no especifico que elemento en el seg argumento me da todos 
## [1] NA
g_feb<- rest_1[2,] + rest_2[2,]
g_feb
## desayuno   comida     cena 
##     6000    11000     7900
g_feb<-as.matrix(g_feb) #hacerla matriz
class(g_feb)
## [1] "matrix" "array"
g_feb<- matrix(g_feb,nrow = 3,ncol = 1)

## f) 

ganancia <- rest_1 + rest_2 
ganancia
##         desayuno comida cena
## enero       4800   9700 6500
## febrero     6000  11000 7900
## marzo       3500   6100 6600
## d) 

rest_01<- as.data.frame(rest_1)
rest_02<- as.data.frame(rest_2)

rest_01 + rest_02 ##suma 
##         desayuno comida cena
## enero       4800   9700 6500
## febrero     6000  11000 7900
## marzo       3500   6100 6600
#rest_01 %*% rest_02 # multiplicación no valida como con matrices 

Clasificación de variables : numéricas y categóricas

variable1<-c("M","H")
vari2<-c("M","H","M","H","H","M","M","M","M","H","H","H","M")

table(vari2)
## vari2
## H M 
## 6 7
vari3<-c("1","0","1","0","0","1","1","1","1","0","0","0","1")
table(vari3)
## vari3
## 0 1 
## 6 7
table(vari2,vari3) #contingencia entre ambas variables
##      vari3
## vari2 0 1
##     H 6 0
##     M 0 7
factor(vari3) #informa sobre los niveles de la variable 
##  [1] 1 0 1 0 0 1 1 1 1 0 0 0 1
## Levels: 0 1
factor(vari2)
##  [1] M H M H H M M M M H H H M
## Levels: H M
as.numeric(vari3)
##  [1] 1 0 1 0 0 1 1 1 1 0 0 0 1
vari3[4]<- "cero" #cambiar uno de los elementos del vector

Preguntas informatvas para conocer si nuestro objeto es un data frame, de tipo numérico o factor

#is.data.frame()
#is.data.frame()
#is.numeric()
#is.factor () ## en este caso es similar a no numérico

Funciones

Aggregate

Descompone una variable en otras y ejecuta funciones en subgrupos

X~Y #Izquierda (X) numérica, derecha (Y), puede ser no numérica

# aggregate(INGESP~RAZAN+ANIOA+EDUC,datos_3,mean)

Ejemplo de aplicación de aggregate (1)

data("ToothGrowth")

# Estadísticas en la base completa

mean(ToothGrowth$len)
## [1] 18.81333
max(ToothGrowth$len) ## el valor máximo de los valores en crecimiento 
## [1] 33.9
##Estadísticas por variables/ subgrupos

##¿cual es el promedio de crecimiento por método de aplicación (supp)?

aggregate(len~supp,data=ToothGrowth,mean)
##   supp      len
## 1   OJ 20.66333
## 2   VC 16.96333
##¿cual es el promedio de crecimiento por dosis(dose)?

aggregate(len~dose,data=ToothGrowth,mean)
##   dose    len
## 1  0.5 10.605
## 2  1.0 19.735
## 3  2.0 26.100
## combinaciones de dosis y método y su correspondiente crecimiento

aggregate(len~dose+ supp,data=ToothGrowth,mean) 
##   dose supp   len
## 1  0.5   OJ 13.23
## 2  1.0   OJ 22.70
## 3  2.0   OJ 26.06
## 4  0.5   VC  7.98
## 5  1.0   VC 16.77
## 6  2.0   VC 26.14
set.seed(15148)
pesos<-rnorm(60,10,2)
pesos2<- runif(60)

peso_dientes<- data.frame(ToothGrowth,pesos=pesos)

aggregate(cbind(pesos,len)~dose+supp,data=peso_dientes,mean)
##   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
aggregate(cbind(len,pesos,pesos2)~dose+supp,data=peso_dientes,mean)
##   dose supp   len     pesos    pesos2
## 1  0.5   OJ 13.23 10.024162 0.4034515
## 2  1.0   OJ 22.70  8.305933 0.5679498
## 3  2.0   OJ 26.06  9.195878 0.4765870
## 4  0.5   VC  7.98  9.744000 0.4664007
## 5  1.0   VC 16.77 10.293366 0.5118205
## 6  2.0   VC 26.14  9.481802 0.3408846

Ejemplo de aplicación de aggregate (2)

###### Aggregate example

cw<-ChickWeight

### continuous variable first, then categorical variable 

# ---------- Obtener la media agrupando peso por dieta 

## aggregate (continuous variable~categorical variable,dataset,function)
aggregate(weight~Diet,cw,mean)
##   Diet   weight
## 1    1 102.6455
## 2    2 122.6167
## 3    3 142.9500
## 4    4 135.2627
# ---------- Obtener la media agrupando peso por dieta y tiempo 

aggregate(weight~Diet+Time,cw,mean)
##    Diet Time    weight
## 1     1    0  41.40000
## 2     2    0  40.70000
## 3     3    0  40.80000
## 4     4    0  41.00000
## 5     1    2  47.25000
## 6     2    2  49.40000
## 7     3    2  50.40000
## 8     4    2  51.80000
## 9     1    4  56.47368
## 10    2    4  59.80000
## 11    3    4  62.20000
## 12    4    4  64.50000
## 13    1    6  66.78947
## 14    2    6  75.40000
## 15    3    6  77.90000
## 16    4    6  83.90000
## 17    1    8  79.68421
## 18    2    8  91.70000
## 19    3    8  98.40000
## 20    4    8 105.60000
## 21    1   10  93.05263
## 22    2   10 108.50000
## 23    3   10 117.10000
## 24    4   10 126.00000
## 25    1   12 108.52632
## 26    2   12 131.30000
## 27    3   12 144.40000
## 28    4   12 151.40000
## 29    1   14 123.38889
## 30    2   14 141.90000
## 31    3   14 164.50000
## 32    4   14 161.80000
## 33    1   16 144.64706
## 34    2   16 164.70000
## 35    3   16 197.40000
## 36    4   16 182.00000
## 37    1   18 158.94118
## 38    2   18 187.70000
## 39    3   18 233.10000
## 40    4   18 202.90000
## 41    1   20 170.41176
## 42    2   20 205.60000
## 43    3   20 258.90000
## 44    4   20 233.88889
## 45    1   21 177.75000
## 46    2   21 214.70000
## 47    3   21 270.30000
## 48    4   21 238.55556

Table

Genera una tabla de frecuencias

#a<-table(datos_3$ANIOA,datos_3$ANIOP)

Apply

Regresa un vector o lista con valores después de aplicar una función a un subgconjunto.

Ejemplo de aplicación de apply

#De la base precargada "iris3" obtendremos estadísticas a nivel de columnas y tipo de flor

#promedio de Sepal L. de cada flor 
mean(iris3[,1,1]) #sepal L de la setosa
## [1] 5.006
mean(iris3[,1,2]) #sepal L de la versicolor
## [1] 5.936
mean(iris3[,1,3]) #virginica
## [1] 6.588
mean(iris[1:50,1])
## [1] 5.006
mean(iris[101:150,1])
## [1] 6.588
apply(iris[,-5],2, mean) ## obtener la media de las columnas de iris menos la 5 
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
##     5.843333     3.057333     3.758000     1.199333
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

##Adjuntar 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 de cada flor de sus 4 variables 
##pero de la base iris3
##data.frame parecido a promedi_flores

prom_setosa_3<-apply(iris3[,,1],2,sd) #Promedios de Setosa
prom_versi_3<-apply(iris3[,,2],2,sd) #Promedios de Versicolor
prom_virgi_3<-apply(iris3[,,3],2,sd) #Promedios de Virginical

###############################

?apply

apply(iris3[,,3],2,summary) #estadísticos de resumen
##         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
colMeans(iris[,-5])
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
##     5.843333     3.057333     3.758000     1.199333
rbind(colMeans(iris[1:50,-5]),
      colMeans(iris[51:100,-5]),
      colMeans(iris[101:150,-5]) )
##      Sepal.Length Sepal.Width Petal.Length Petal.Width
## [1,]        5.006       3.428        1.462       0.246
## [2,]        5.936       2.770        4.260       1.326
## [3,]        6.588       2.974        5.552       2.026
length(iris3)
## [1] 600

Funciones personalizadas

Ejemplos

  1. Esta función procesa a los casos NA en X y los toma como variables numéricas.
cambio<- function (x)
{
  if (is.na(x)== T)
  {
    x<-as.numeri(0)
  }
  else
  {
    x<- as.numeric(x)
  }
}
  1. Esta función eleva al cuadrado a X
cuad<-function(x)
{
  x<-x*x
}

Personalizadas complejas

Ejemplo

### Ingreso de dos o más argumentos ( resolver sistema de ecuaciones)

## le voy a pedir que me arroje una lista para poder extraer elementos

descomposi2<-function(w){
  lista1<-eigen(cor(w))
  return(list(lista1$vectors,lista1$values))
}

descomposi2(iris3[,,1])
## [[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
## 
## [[2]]
## [1] 2.0585402 1.0221782 0.6678202 0.2514613
### extraemos elementos

descomposi2(iris3[,,1])[[1]][,1]
## [1] 0.6044164 0.5756194 0.3754348 0.4029788
descomposi2(iris3[,,1])[[2]][3]
## [1] 0.6678202
### Ingresar dos o mas argumentos 

coeficiente<-matrix(c(3,2,1,5,3,4,1,1,-1),ncol=3,byrow=TRUE)
respuesta<-c(1,2,1)

###le vamos a pedir que pegue texto a la siguiente función

res_ecua2<-function(x,y){
  solucion<-solve(x,y)
  return(paste0("La solución al sistema es: x=",solucion[1]))
}
res_ecua2(y=respuesta,x=coeficiente)
## [1] "La solución al sistema es: x=-3.99999999999999"
coef2<-matrix(c(5,-3,-1,1,4,-6,2,3,4),ncol=3,byrow=TRUE)
resp2<-c(1,-1,9)

res_ecua2(y=resp2,x=coef2)
## [1] "La solución al sistema es: x=1"
res_ecua3<-function(x,y){
  solucion<-solve(x,y)
  return(paste0("La solución al sistema es: x=",solucion[1]))
  return(paste0("La solución al sistema es: y=",solucion[2]))
  return(paste0("La solución al sistema es: z=",solucion[3]))
}
res_ecua3(y=resp2,x=coef2)
## [1] "La solución al sistema es: x=1"
### tres salidas de texto desordenado 

res_ecua3<-function(x,y){
  solucion<-solve(x,y)
  return(paste0("La solución al sistema es: x=",solucion[1],
                "La solución al sistema es: y=",solucion[2],
                "La solución al sistema es: z=",solucion[3]) )
}
res_ecua3(y=resp2,x=coef2)
## [1] "La solución al sistema es: x=1La solución al sistema es: y=1La solución al sistema es: z=1"
### insertar "." nos ayuda a que este espaciada la salida de texto 

res_ecua3<-function(x,y){
  solucion<-solve(x,y)
  return(paste0("La solución al sistema es: x=",solucion[1],". ",
                "La solución al sistema es: y=",solucion[2],". ",
                "La solución al sistema es: z=",solucion[3]) )
}
res_ecua3(y=resp2,x=coef2)
## [1] "La solución al sistema es: x=1. La solución al sistema es: y=1. La solución al sistema es: z=1"
res_ecua3(y=respuesta,x=coeficiente)
## [1] "La solución al sistema es: x=-3.99999999999999. La solución al sistema es: y=5.99999999999999. La solución al sistema es: z=0.999999999999997"
res_ecua3<-function(x,y){
  solucion<-solve(x,y)
  return(paste0("La solución al sistema es: x=",solucion[1],", ",
                "y= ",solucion[2],", ",
                "z= ",solucion[3]) )
}

###### cambiando paste0 por cat  y \n para ir a nueva linea

res_ecua4<-function(x,y){
  solucion<-solve(x,y)
  return(cat("La solución al sistema es:","\n",
             "x=",solucion[1],",","\n",
             "y=",solucion[2],", ","\n",
             "z=",solucion[3]) )
}
res_ecua4(y=respuesta,x=coeficiente)
## La solución al sistema es: 
##  x= -4 , 
##  y= 6 ,  
##  z= 1

Formato de hora y fecha

Transformar cadenas de texto a formato de dia y hora

library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
bosque<-read.csv("/Users/mac/Downloads/Datos bosque Harvard.csv")

#getwd() #¿cual es nuestro directorio de trabajo? 

#as.Date()  ## transforming dates

#strptime ### handling time and dates at the same time 
substr(bosque$datetime[1],1,5) ## extrae o reemplaza subelementos de un vector
## [1] "2005-"
substr(bosque$datetime[1],1,10) ## extrae texto de la posicion 1 a la 10 
## [1] "2005-01-01"
substr(bosque$datetime[2],1,10) ## extrae o reemplaza subelementos de un vector
## [1] "2005-01-01"
pruebaxxs<- c("clase de R en la METPOL", "hola")
substr(pruebaxxs,9,22)
## [1] " R en la METPO" ""
strsplit(pruebaxxs,",")## separa texto de acuerdo a algún caracter ( ejemplo una coma)
## [[1]]
## [1] "clase de R en la METPOL"
## 
## [[2]]
## [1] "hola"
#Función que transforme 2005 - 01-01T00:15 a uno de tipo strptime

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)
}
trans_fecha(bosque$datetime[2])
## [1] "2005-01-01 00:30"

Ejemplo (2)

library(lubridate)

## leer ambas bases
covid_oaxaca<-read.csv("/Users/mac/Downloads/covid_oaxaca.csv")

funcionas<-as.Date(covid_oaxaca$FECHA_INGRESO,format="%Y-%m-%d")


### metemos en as.date()el año y especificas su formato 

funcionas2<-as.Date(covid_oaxaca$FECHA_INGRESO,formart="%Y-%m-%d")

funcionas3<-as.Date(covid_oaxaca$FECHA_SINTOMAS,formart="%Y-%m-%d")

## le pedimos extraer el dia 

#day(funcionas2)

#table(month(funcionas2))

##fecha de ingreso - fecha de sintomas 

#funcionas2- funcionas3

### tiempo que le tomo en llegar a los pacientes al hospital despues de sintomas 

#day(funcionas2)
#table(month(funcionas2))
summary(as.numeric(funcionas2-funcionas3))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   2.000   3.000   3.619   5.000  68.000

Relacionar tablas

Mediante la función “merge” podemos relacionar tablas. Esta relacion se realiza sobre las columnas o sobre las filas de dos tablas diferentes.

#merge(x, y, by = intersect(names(x), names(y)),
 #     by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
  #    sort = TRUE, suffixes = c(".x",".y"), no.dups = TRUE,
   #   incomparables = NULL, …)

Ejemplo (1)

base_covid<-read.csv("/Users/mac/Downloads/COVID2020_5estados.csv")

## especificar que hoja necesitamos 

library(readxl)

catalogos<- read_xlsx("/Users/mac/Downloads/201128 Catalogos.xlsx",sheet = "Catálogo de ENTIDADES")

### relacionar tablas

#base_covid$ENTIDAD_UM
catalogos$CLAVE_ENTIDAD
##  [1] "01" "02" "03" "04" "05" "06" "07" "08" "09" "10" "11" "12" "13" "14" "15"
## [16] "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30"
## [31] "31" "32" "36" "97" "98" "99"
## Emparejar tablas 

catalogos$CLAVE_ENTIDAD<- as.numeric(catalogos$CLAVE_ENTIDAD)

###agregamos sort= false porque por default ordena el empate de manera ascendente y esta vez no

empate_estado<-merge(base_covid,catalogos,by.x = "ENTIDAD_UM",by.y = "CLAVE_ENTIDAD",sort = FALSE)
##empate_estadoUNM[sort(empate_estado)]

head(empate_estado)
##   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
##especificar como x la table base 

dim(base_covid)
## [1] 149564     39
dim(empate_estado)
## [1] 149564     41
catalo_sexo<-read_excel("/Users/mac/Downloads/201128 Catalogos.xlsx",sheet = "Catálogo SEXO")
catalo_enti<-read_excel("/Users/mac/Downloads/201128 Catalogos.xlsx",sheet = "Catálogo SEXO")

Ejemplo (2)

datos_covid20<-read.csv("/Users/mac/Downloads/COVID2020_5estados.csv")

library(readxl)

### en excel quitar 00s
## especificar que hoja necesitamos 

catalo_enti<- read_xlsx("/Users/mac/Downloads/201128 Catalogos.xlsx",sheet = "Catálogo de ENTIDADES")
catalogos_muni<- read_xlsx("/Users/mac/Downloads/201128 Catalogos.xlsx",sheet = "Catálogo MUNICIPIOS")

### relacionar tablas

relacion<-merge(datos_covid20,catalo_enti,by.x = "ENTIDAD_UM",by.y="CLAVE_ENTIDAD",all.x=TRUE)

head(relacion)
##   ENTIDAD_UM   X FECHA_ACTUALIZACION ID_REGISTRO ORIGEN SECTOR SEXO ENTIDAD_NAC
## 1          1  37          2020-10-28      0fac67      2     12    2          11
## 2          1  41          2020-10-28      193721      2     12    2          99
## 3          1  88          2020-10-28      1d5a14      2     12    2           1
## 4          1 100          2020-10-28      09e17c      2     12    2          32
## 5          1 118          2020-10-28      0d23a3      1      6    1           1
## 6          1 144          2020-10-28      1c725c      2     12    2           1
##   ENTIDAD_RES MUNICIPIO_RES TIPO_PACIENTE FECHA_INGRESO FECHA_SINTOMAS
## 1           1             1             1    2020-03-22     2020-03-18
## 2           1             6             1    2020-03-27     2020-03-26
## 3           1             1             2    2020-03-17     2020-03-16
## 4           1             1             1    2020-03-26     2020-03-26
## 5           1             1             1    2020-03-26     2020-03-23
## 6           1             1             1    2020-03-23     2020-03-20
##    FECHA_DEF INTUBADO NEUMONIA EDAD NACIONALIDAD EMBARAZO HABLA_LENGUA_INDIG
## 1 9999-99-99       97        2   48            1       97                  2
## 2 9999-99-99       97        2   79            2       97                  2
## 3 9999-99-99        2        2   51            1       97                  2
## 4 9999-99-99       97        2   75            1       97                  2
## 5 9999-99-99       97        2   31            1        2                  2
## 6 9999-99-99       97        2   60            1       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    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
##   OBESIDAD RENAL_CRONICA TABAQUISMO OTRO_CASO TOMA_MUESTRA RESULTADO_LAB
## 1        2             2          2         1            1             1
## 2        2             2          2         1            1             1
## 3        1             2          2         2            1             1
## 4        2             2          2         1            1             1
## 5        2             2          2         1            1             1
## 6        2             2          2         2            1             1
##   CLASIFICACION_FINAL MIGRANTE PAIS_NACIONALIDAD PAIS_ORIGEN UCI
## 1                   3       99            México          97  97
## 2                   3       99              Cuba          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            México          97  97
##   ENTIDAD_FEDERATIVA ABREVIATURA
## 1               <NA>        <NA>
## 2               <NA>        <NA>
## 3               <NA>        <NA>
## 4               <NA>        <NA>
## 5               <NA>        <NA>
## 6               <NA>        <NA>
tabla_munic<-merge(datos_covid20,catalogos_muni,by.x=c("ENTIDAD_RES","MUNICIPIO_RES"),
                   by.y=c("CLAVE_ENTIDAD","CLAVE_MUNICIPIO"),all.x = TRUE)

###all.x=TRUE   filas extra se agregan al final, CON falso quita los casos de x que no tienen registros con empate 



table(tabla_munic$MUNICIPIO)
## 
##                           AGUA DULCE                  JOSÉ SIXTO VERDUZCO 
##                                   24                                    1 
##                 MARTÍNEZ DE LA TORRE                    MEDELLÍN DE BRAVO 
##                                    1                                    3 
##                           MINATITLÁN                             MISANTLA 
##                                   27                                    2 
##                             MOLOACÁN NANCHITAL DE LÁZARO CÁRDENAS DEL RÍO 
##                                    1                                    1 
##                             NARANJAL                              NOGALES 
##                                    3                                    1 
##                              OMEALCA                              ORIZABA 
##                                    1                                    9 
##                               PÁNUCO                             PAPANTLA 
##                                    7                                    6 
##                 POZA RICA DE HIDALGO                               PUEBLA 
##                                   58                                   11 
##                         PUEBLO VIEJO                           RÍO BLANCO 
##                                    2                                    1 
##                   SAN ANDRÉS CHOLULA                    SAN ANDRÉS TUXTLA 
##                                    2                                    5 
##                   SAN JOSÉ CHILTEPEC           SAN JUAN BAUTISTA TUXTEPEC 
##                                    1                                    3 
##                SAN MARTÍN TEXMELUCAN                   SAN PEDRO MIXTEPEC 
##                                    1                                    1 
##                  SANTIAGO MIAHUATLÁN                      SANTIAGO TUXTLA 
##                                    1                                   11 
##            SANTO DOMINGO TEHUANTEPEC                             TAMIAHUA 
##                                    2                                    2 
##                         TAMPICO ALTO                            TANTOYUCA 
##                                    1                                    1 
##                         TECAMACHALCO                            TECOLUTLA 
##                                    1                                    1 
##                              TEMPOAL            TETELES DE AVILA CASTILLO 
##                                    1                                    1 
##                        TIERRA BLANCA                            TIHUATLÁN 
##                                   10                                    2 
##                          TLALMANALCO                  TLALNEPANTLA DE BAZ 
##                                    1                                    2 
##                               TOLUCA                            TULTITLÁN 
##                                    4                                    1 
##                          TUXCACUESCO                               TUXPAN 
##                                    1                                   25 
##                        UNIÓN HIDALGO                              URUAPAN 
##                                    2                                    3 
##                           VALLADOLID                     VEGA DE ALATORRE 
##                                    2                                    1 
##                             VERACRUZ                        VILLA HIDALGO 
##                                   50                                    7 
##                       VILLA VICTORIA                            XICOTEPEC 
##                                    1                                    1 
##                          ZACAPOAXTLA                               ZACAPU 
##                                    1                                    1 
##                              ZAPOPAN                          ZAPOTLANEJO 
##                                    8                                    1 
##                            ZITÁCUARO 
##                                    1