Manejo de Bases de Datos y programación (R + STATA)
Actividad 2
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 seleccionadaListas
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 vectorPreguntas 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éricoFunciones
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
- 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)
}
}- 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