R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

#Ejercicio_1
#Cread un data frame con los datos de los pacientes anteriores y: 1. Filtrad los pacientes con niveles de colesterol por encima de 200. 2. Calculad las estadísticas descriptivas de los niveles de colesterol de los pacientes.
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
#Crear un data frame con datos de pacientes
datos_pacientes <- data.frame(
  Nombre = c("Paciente1", "Paciente2", "Paciente3", "Paciente4", "Paciente5"),
  Edad = c(45, 32, 28, 55, 40),
  Género = c("Femenino", "Masculino", "Femenino", "Masculino", "Femenino"),
  Presion_arterial = c("120/80", "130/85", "110/70", "140/90", "125/75"),
  Colesterol = c(180, 200, 150, 220, 190)
)

#Filtrar pacientes con niveles de colesterol por encima de 200
pacientes_colesterol_alto <- datos_pacientes %>%
  filter(Colesterol > 200)

#Calcular estadísticas descriptivas de los niveles de colesterol de los pacientes
estadísticas_colesterol <- pacientes_colesterol_alto %>%
  summarize(
    media_colesterol = mean(Colesterol),
    desviación_estándar_colesterol = sd(Colesterol),
    máximo_colesterol = max(Colesterol),
    mínimo_colesterol = min(Colesterol)
  )
#Mostrar el data frame de pacientes con colesterol alto y estadísticas descriptivas
print(pacientes_colesterol_alto)
##      Nombre Edad    Género Presion_arterial Colesterol
## 1 Paciente4   55 Masculino           140/90        220
print("Estadísticas de niveles de colesterol en pacientes con colesterol alto:")
## [1] "Estadísticas de niveles de colesterol en pacientes con colesterol alto:"
print(estadísticas_colesterol)
##   media_colesterol desviación_estándar_colesterol máximo_colesterol
## 1              220                             NA               220
##   mínimo_colesterol
## 1               220
#Ejercicio_2
#El porcentaje de grasa corporal óptima de un individuo depende de la edad y del género. Por ello, en general: Porcentaje masa corporal. Edad (años) Mujer (%) Hombre (%) 10-30 20-26 12-18 31-40 21-27 13-19 41-50 22-28 14-20 51-60 22-30 16-20 61 o más 22-31 17-21 Nota.- Estos valores pueden variar ligeramente según el origen de la publicación. (Fuente: http://nutricionymultinivel.blogspot.com/p/tablas-de-valores-de-la-organizacion.html). Definid variables que representen la edad y el género de un individuo y, en función del valor que les asignéis, mostrad el porcentaje de masa corporal óptima que les correspondería con base en la tabla anterior.
##definimos las variables sexo y edad, asignando unos determinados valores
sexo<-"mujer"
edad<-25
##Evaluamos los valores de la masa corporal óptima según género y edad
if(sexo=='mujer') {
if(edad<10)
mc_opt<-"No registrado"
else
if(edad<=30)
mc_opt<-'20-26'
else
if(edad<=40)
mc_opt<-'21-27'
else
if(edad<=50)
mc_opt<-'22-28'
else
if(edad<=60)
mc_opt<-'22-30'
else
mc_opt<-'22-31'
} else {
if(edad<10)
mc_opt<-"No registrado"
else
if(edad<=30)
mc_opt<-'12-18'
else
if(edad<=40)
mc_opt<-'13-19'
else
if(edad<=50)
mc_opt<-'14-20'
else
if(edad<=60)
mc_opt<-'16-20'
else
mc_opt<-'17-21'
}
#a partir de los valores iniciales de edad y género, mostramos el valor de la masa corporal óptima
print(mc_opt)
## [1] "20-26"
#Ejercicio_3:A partir del conjunto de datos anorexia del paquete MASS, calculad el porcentaje de pacientes que han realizado cada tipo de tratamiento.
library(MASS)
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
data("anorexia")
#Defino los contadores para cada tipo de tratamiento
p_cont <- 0
p_cbt <- 0
p_ft <- 0
tratamientos <- c(anorexia$Treat)
#Definir la variable que utilizo para recorrer los registros:
for (i in 1:length(tratamientos)) {
if (anorexia$Treat[i]=="Cont")
p_cont<-p_cont+1
else
if (anorexia$Treat[i]=="CBT")
p_cbt<-p_cbt+1
else
p_ft<-p_ft+1
}
#calculamos los porcentajes de cada tratamiento
porc_cont<-p_cont/length(tratamientos)
porc_cbt<-p_cbt/length(tratamientos)
porc_ft<-p_ft/length(tratamientos)
#mostramos los valores de los porcentajes
print(porc_cont)
## [1] 0.3611111
print(porc_cbt)
## [1] 0.4027778
print(porc_ft)
## [1] 0.2361111
#Ejercicio_4:A partir del vonjunto de datos birthwt del paquete MASS, calculad cuántos recién nacidos con un peso inferior a 2.600 gramos corresponden a madres menos de veinte años y fumadoras.
#cargamos los datos de birthwt
library(MASS)
data("birthwt")
#definimos las variables
c_inf<-0
bwt<-c(birthwt$bwt)
#recorremos los registros del conjunto de datos
for(i in 1:length(bwt))
#comprobamos los criterios establecidos en el enunciado
if (birthwt$bwt[i]<2600)
if (birthwt$age[i]<20)
if (birthwt$smoke[i]==1)
c_inf<-c_inf+1
#mostramos el resultado
print (c_inf)
## [1] 7
#Ejercicio_5: Supongamos que queremos generar un registro médico de pacientes que incluya información como nombre, edad, diagnóstico y niveles de glucosa en sangre, von los siguientes datos de pacientes:
nombres <- c("Ana", "Luis", "María", "Carlos", "Elena")
edades <- c(45, 32, 28, 55, 40)
diagnósticos <- c("Diabetes", "Hipertensión", "Sano", "Hipertensión", "Asma")
glucosa <- c(125, 140, 95, 160, 110)
#Función para crear un registro médico de pacientes
crear_registro_médico <- function(nombres, edades, diagnósticos, glucosa) {
pacientes <- data.frame(
Nombre = nombres,
Edad = edades,
Diagnóstico = diagnósticos,
Glucosa = glucosa
)
return(pacientes)
}
#Datos de pacientes
nombres <- c("Ana", "Luis", "María", "Carlos", "Elena")
edades <- c(45, 32, 28, 55, 40)
diagnósticos <- c("Diabetes", "Hipertensión", "Sano", "Hipertensión", "Asma")
glucosa <- c(125, 140, 95, 160, 110)
#Llamada a la función para crear el registro médico
registro_medico <- crear_registro_médico(nombres, edades, diagnósticos, glucosa)
#Mostrar el registro médico
print(registro_medico)
##   Nombre Edad  Diagnóstico Glucosa
## 1    Ana   45     Diabetes     125
## 2   Luis   32 Hipertensión     140
## 3  María   28         Sano      95
## 4 Carlos   55 Hipertensión     160
## 5  Elena   40         Asma     110
#Ejercicio_6: A partir del cojnto de datos birthwt del paquete MASS, guardad en un vector lo spesos de los recién nacidos cuyas madres tengan menos de 20 años. Calculad la media y representad gráficamente este vetor (por ejemplo, un diagrama de puntos)
library(MASS)
data("birthwt")
#definimos el vector que guardará los pesos
bwt_c<-c()
j<-1
#definimos la función
F_bwt<-function(){
#recorremos los valores de pesos y guardamos en un vector aquellos cuya edad de las madres sea <20
for (i in 1:length(birthwt$bwt))
if (birthwt$age[i]<20){
bwt_c[j]<-birthwt$bwt[i]
j<-j+1
}
#calculamos la media
return (bwt_c)
}
bwt_c_edad<-F_bwt()
bwt_c_edad
##  [1] 2523 2600 2637 2722 2733 2769 2769 2778 2906 2920 2920 2977 3062 3062 3062
## [16] 3090 3175 3175 3225 3225 3374 3374 3402 3572 3572 3629 3643 3651 3651 3756
## [31] 3856 3860 3884 3941 3997 4238 1885 1899 2082 2084 2125 2225 2282 2296 2353
## [46] 2381 2414 2438 2466 2495 2495
#calculamos la media y un gráfico de puntos
mean(bwt_c_edad)
## [1] 2973.529
plot(bwt_c_edad)

#Ejercicio_7: A partir de los ejemplo trabajados de definición de funciones, definid dos funviones, una que calcule el IMC de un individuo y otra que calcule el porcentaje de peso corporal óptimo en función de la edad y el género. En ambas funciones, es necesario definir los parámetros que correspondan.
f_IMC<-function(peso,altura) {
return (peso/(altura*altura))
}
v_IMC<-f_IMC(45,1.65)
print(v_IMC)
## [1] 16.52893
#Definimos la función que calcule el peso corporal óptimo (PCO) a partir del sexo y la edad
f_PCO<-function(sexo,edad){
if(sexo=='mujer') {
if(edad<10)
mc_opt<-"No registrado"
else
if(edad<=30)
mc_opt<-'20-26'
else
if(edad<=40)
mc_opt<-'21-27'
else
if(edad<=50)
mc_opt<-'22-28'
else
if(edad<=60)
mc_opt<-'22-30'
else
mc_opt<-'22-31'
}else {
if(edad<10)
mc_opt<-"No registrado"
else
if(edad<=30)
mc_opt<-'12-18'
else
if(edad<=40)
mc_opt<-'13-19'
else
if(edad<=50)
mc_opt<-'14-20'
else
if(edad<=60)
mc_opt<-'16-20'
else
mc_opt<-'17-21'
}
return (mc_opt)
}
v_PCO<-f_PCO('mujer',25)
print(v_PCO)
## [1] "20-26"
#Ejercicio_8: Si consideramos el conjunto de datos birthwt del paquete MASS, cread una función que muestre los valores de peso de los recién nacidos cuyas madres sean blancas y cuyo peso esé por debajo d ela media de los pesos observados.
media_peso<-function(){
bwt<-c(birthwt$bwt)
race<-c(birthwt$race)
mean(bwt)
for (i in 1:length(bwt))
if (race[i]==1)
if (bwt[i]<mean(bwt))
print(bwt[i])
}
media_peso()
## [1] 2557
## [1] 2594
## [1] 2600
## [1] 2637
## [1] 2663
## [1] 2665
## [1] 2769
## [1] 2769
## [1] 2782
## [1] 2821
## [1] 2835
## [1] 2836
## [1] 2877
## [1] 2906
## [1] 2920
## [1] 2922
## [1] 1021
## [1] 1790
## [1] 1818
## [1] 1885
## [1] 1928
## [1] 1928
## [1] 1936
## [1] 2082
## [1] 2084
## [1] 2084
## [1] 2100
## [1] 2187
## [1] 2225
## [1] 2296
## [1] 2353
## [1] 2353
## [1] 2410
## [1] 2410
## [1] 2414
## [1] 2424
## [1] 2466
## [1] 2466
## [1] 2495
#Ejercicio_9: A partir del conjunto de datos Melanoma del paquete MASS que hace referencia a los datos de supervivencia de melanoma maligno, se pide resolver las siguientes cuestiones: a) Definid un vector que guarde las edades de los individuos observados y calculad la media, el máximo y el mínimo de esta distribución. b) Definid una función que recorra el conjunto de datos y muestre cuántos de los individuos observados murieron a causa del melanoma, cuántos sobrevivieron y cuántos murieron por diferentes causas. c) Definid una función que recorra el conjunto de datos y muestre la proporción de hombres y de mujeres que murieron por melanoma.
library(MASS)
data("Melanoma")
#mostramos los datos de Melanoma
head(Melanoma)
##   time status sex age year thickness ulcer
## 1   10      3   1  76 1972      6.76     1
## 2   30      3   1  56 1968      0.65     0
## 3   35      2   1  41 1977      1.34     0
## 4   99      3   0  71 1968      2.90     0
## 5  185      1   1  52 1965     12.08     1
## 6  204      1   1  28 1971      4.84     1
#a) Vector que guarde las edades de los individuos observados y calculad la media, el máximo y el mínimo de esta distribución.
edades_m<-c(Melanoma$age)
mean(edades_m)
## [1] 52.46341
max(edades_m)
## [1] 95
min(edades_m)
## [1] 4
#b) Función que recorra el conjunto de datos y muestre cuántos de los individuos observados murieron a causa del melanoma, cuántos sobrevivieron y cuántos murieron por diferentes causas.
F_diagnóstico<-function() {
#definimos contadores
muerte_m<-0
vivo<-0
muerte_oc<-0
status<-Melanoma$status
for (i in 1:length(Melanoma$status))
if(status[i]==1)
muerte_m<-muerte_m+1
else
if(status[i]==2)
vivo<-vivo+1
else
muerte_oc<-muerte_oc+1
return (c(muerte_m,vivo,muerte_oc))
}
print(F_diagnóstico())
## [1]  57 134  14
#c) Función que recorra el conjunto de datos y muestre la proporción de hombres y de mujeres que murieron por melanoma.
F_diagnóstico_porc<-function(){
  muerte_m<-0
  muerte_m_m<-0
  muerte_m_f<-0
  status<-Melanoma$status
  sex<-Melanoma$sex
  for (i in 1:length(Melanoma$status))
if(status[i]==1){
muerte_m<-muerte_m+1
if (sex[i]==1)
muerte_m_m<-muerte_m_m+1
else
muerte_m_f<-muerte_m_f+1
}
porc_m_m<-muerte_m_m/muerte_m
porc_m_f<-muerte_m_f/muerte_m
return (c(porc_m_m,porc_m_f))
}
print(F_diagnóstico_porc())
## [1] 0.5087719 0.4912281
#Ejercicio_10
library(sqldf)
## Loading required package: gsubfn
## Loading required package: proto
## Loading required package: RSQLite
library(RSQLite)
library(dplyr)

db <- RSQLite::datasetsDb()
dbListTables(db)
##  [1] "BOD"              "CO2"              "ChickWeight"      "DNase"           
##  [5] "Formaldehyde"     "Indometh"         "InsectSprays"     "LifeCycleSavings"
##  [9] "Loblolly"         "Orange"           "OrchardSprays"    "PlantGrowth"     
## [13] "Puromycin"        "Theoph"           "ToothGrowth"      "USArrests"       
## [17] "USJudgeRatings"   "airquality"       "anscombe"         "attenu"          
## [21] "attitude"         "cars"             "chickwts"         "esoph"           
## [25] "faithful"         "freeny"           "infert"           "iris"            
## [29] "longley"          "morley"           "mtcars"           "npk"             
## [33] "pressure"         "quakes"           "randu"            "rock"            
## [37] "sleep"            "stackloss"        "swiss"            "trees"           
## [41] "warpbreaks"       "women"
#Media del factor Ozone
sqldf("SELECT AVG(Ozone) FROM airquality")
##   AVG(Ozone)
## 1   42.12931
head(sqldf("SELECT Ozone, [Solar.R], Wind FROM airquality WHERE Month IN (5,6,7)"))
##   Ozone Solar.R Wind
## 1    41     190  7.4
## 2    36     118  8.0
## 3    12     149 12.6
## 4    18     313 11.5
## 5    NA      NA 14.3
## 6    28      NA 14.9
head(sqldf("SELECT Ozone, [Solar.R], Wind, Month FROM airquality WHERE Month IN (5,6,7) ORDER BY Month DESC"))
##   Ozone Solar.R Wind Month
## 1   135     269  4.1     7
## 2    49     248  9.2     7
## 3    32     236  9.2     7
## 4    NA     101 10.9     7
## 5    64     175  4.6     7
## 6    40     314 10.9     7
#d) Mostrad los datos de Wind agrupados por Month
sqldf("SELECT Wind, Month FROM airquality GROUP BY Month")
##   Wind Month
## 1  7.4     5
## 2  8.6     6
## 3  4.1     7
## 4  6.9     8
## 5  6.9     9
#Caso_práctico_1: Según las investigaciones de Mark E. Curtis, cada giro completo de la doble hélice del ADN mide 21 Å de ancho por 34 Å de largo; 34 y 21 son dos números consecutivos en la sucesión de Fibonacci. Por lo tanto, su cociente, 1.6190476, aproxima de cerca la Razón Áurea φ=1.6180339… (Fuente: http://www.sacred-geometry.es/?q=es/content/phi-en-la- estructura-del-adn ). Se pide:
#a) Implementad en R una función que, dado un valor n, muestre los valores de la serie de Fibonacci hasta ese valor determinado.
##definimos la función
f_fibonacci <- function(n){
num <- c(0, 1)
i = 2
for (i in i:(n-1)){
num[i+1] <- num[i]+num[i-1]
}
num <-num[1:length(num)]
return(num)
}
f_fibonacci(5)
## [1] 0 1 1 2 3
f_fibonacci(8)
## [1]  0  1  1  2  3  5  8 13
f_fibonacci(15)
##  [1]   0   1   1   2   3   5   8  13  21  34  55  89 144 233 377
#b) ¿Para qué valores de n localizamos, en la serie de Fibonacci, las medidas de la doble hélice de la molécula de ADN?
f_fibonacci(9)
## [1]  0  1  1  2  3  5  8 13 21
f_fibonacci(10)
##  [1]  0  1  1  2  3  5  8 13 21 34
#c) Complementad el código del apartado a) añadiendo una nueva función (o las instrucciones que correspondan en la función creada anteriormente) de manera que, para un determinado valor n, muestre las proporciones sucesivas de los valores de la serie de Fibonacci. ¿A partir de qué valor de n, esta proporción se va aproximando a la Razón Áurea?
f_Áurea<-function(n){
valores<-f_fibonacci(n)
razón<-c(1)
for(i in 2:n){
razón[i]<-valores[i]/valores[i-1]
}
return(razón)
}
#Comprobamos para distintos valores de n:
f_Áurea(7)
## [1] 1.000000      Inf 1.000000 2.000000 1.500000 1.666667 1.600000
f_Áurea(15)
##  [1] 1.000000      Inf 1.000000 2.000000 1.500000 1.666667 1.600000 1.625000
##  [9] 1.615385 1.619048 1.617647 1.618182 1.617978 1.618056 1.618026
#Comprobamos que, a medida que va aumentando el valor de n, más se ajusta el valor obtenido al valor de la razón áurea.

#Caso_práctico_2: La secuencia de ADN de un individuo contiene información genética de este. Actualmente, existen técnicas que permiten realizar esta secuenciación y aportar datos para investigar el comportamiento de diferentes tipos de organismos biológicos. (Fuente: https://es.wikipedia.org/wiki/Secuenciaci%C3%B3n_del_ADN). Se pide generar una secuencia de ADN y calcular su inverso y su complementario.
#Función para generar una secuencia de ADN aleatoria
generar_secuencia_adn <- function(longitud) {
bases <- c("A", "T", "C", "G")
secuencia <- sample(bases, longitud, replace = TRUE)
return(paste(secuencia, collapse = ""))
}
#Función para obtener el inverso de una secuencia de ADN
obtener_inverso_adn <- function(secuencia) {
inverso <- rev(strsplit(secuencia, "")[[1]])
return(paste(inverso, collapse = ""))
}
#Función para obtener el complementario de una secuencia de ADN
obtener_complementario_adn <- function(secuencia) {
complementario <- chartr("ATCG", "TAGC", secuencia)
return(complementario)
}
#Generar una secuencia de ADN aleatoria
secuencia_original <- generar_secuencia_adn(20)
#Obtener el inverso de la secuencia
secuencia_inversa <- obtener_inverso_adn(secuencia_original)
#Obtener el complementario de la secuencia
secuencia_complementaria <- obtener_complementario_adn(secuencia_original)
#Mostrar los resultados
cat("Secuencia original: ", secuencia_original, "\n")
## Secuencia original:  TATCTAATGGGCCTTACGCG
## Secuencia original: GGTTTTGCTTCTAAAATAGG
cat("Secuencia inversa: ", secuencia_inversa, "\n")
## Secuencia inversa:  GCGCATTCCGGGTAATCTAT
## Secuencia inversa: GGATAAAATCTTCGTTTTGG
cat("Secuencia complementaria: ", secuencia_complementaria, "\n")
## Secuencia complementaria:  ATAGATTACCCGGAATGCGC
## Secuencia complementaria: CCAAAACGAAGATTTTATCC
#Puede visualizarse un ejemplo más exhaustivo en http://manuals.bioinformatics.ucr.edu/home/programming-in-r#TOC-R-Programming-Exercises

#Caso_práctico_3:Supongamos que pretendemos gestionar la información de una base de datos de pacientes de un hospital. En principio, disponemos de dos tablas, pacientes y registros_médicos. De la tabla pacientes, disponemos de los siguientes datos: pacientes (nombre, edad, género, condición_médica) (‘Paciente1’, 45, ‘Femenino’, ‘Diabetes’), (‘Paciente2’, 32, ‘Masculino’, ‘Hipertensión’), (‘Paciente3’, 28, ‘Femenino’, ‘Sano’), (‘Paciente4’, 55, ‘Masculino’,‘Hipertensión’), (‘Paciente5’, 40, ‘Femenino’, ‘Asma’).De la tabla registros_médicos, disponemos de los siguientes datos: registros_médicos (paciente_id, fecha, nivel_glucosa) (1, ‘2023-08-01’, 125.5), (2, ‘2023-08-01’, 140.2), (3,‘2023-08-01’, 95.8), (4,‘2023-08-01’, 160.6), (5, ‘2023-08-01’, 110.9).Se pide utilizar las instrucciones de acceso a bases de datos para resolver las siguientes cuestiones:
#1)Cread la base de datos (Hospital), las tablas y los registros correspondientes y la conexión desde R.
library(RSQLite)
library(dplyr)
library(ggplot2)
#Paso 1: Crear la base de datos, las tablas y los registros correspondientes y la conexión desde R
#Conectar a la base de datos SQLite
con <- dbConnect(SQLite(), "hospital.db")
#Crear la tabla "pacientes" y agregar registros
pacientes <- data.frame(
nombre = c('Paciente1', 'Paciente2', 'Paciente3', 'Paciente4',
'Paciente5'),
edad = c(45, 32, 28, 55, 40),
género = c('Femenino', 'Masculino', 'Femenino', 'Masculino', 'Femenino'),
condición_médica = c('Diabetes', 'Hipertensión', 'Sano', 'Hipertensión',
'Asma')
)
dbWriteTable(con, "pacientes", pacientes, row.names = FALSE, overwrite =
TRUE)
#Crear la tabla "registros_médicos" y agregar registros
registros_médicos <- data.frame(
paciente_id = c(1, 2, 3, 4, 5),
fecha = as.Date('2023-08-01'),
nivel_glucosa = c(125.5, 140.2, 95.8, 160.6, 110.9)
)
dbWriteTable(con, "registros_médicos", registros_médicos, row.names = FALSE,
overwrite = TRUE)
#2)Mostrad pacientes con una condición médica específica (por ejemplo, diabetes).
pacientes_diabetes <- dbGetQuery(con, "SELECT * FROM pacientes WHERE
condición_médica = 'Diabetes'")
print(pacientes_diabetes)
##      nombre edad   género condición_médica
## 1 Paciente1   45 Femenino         Diabetes
#3)Calculad estadísticas descriptivas de los niveles de glucosa en sangre.
estadísticas_glucosa <- dbGetQuery(con, "SELECT AVG(nivel_glucosa) AS
media_glucosa,
MAX(nivel_glucosa) AS
máximo_glucosa,
MIN(nivel_glucosa) AS
mínimo_glucosa
FROM registros_médicos")
print(estadísticas_glucosa)
##   media_glucosa máximo_glucosa mínimo_glucosa
## 1         126.6          160.6           95.8
#4)Obtened los registros médicos de pacientes con hipertensión y sus estadísticas de glucosa.
registros_hipertensión <- dbGetQuery(con, "SELECT r.*
FROM registros_médicos r
JOIN pacientes p ON r.paciente_id
= p.rowid
WHERE p.condición_médica =
'Hipertensión'")
estadísticas_glucosa_hipertensión <- dbGetQuery(con, "SELECT
AVG(nivel_glucosa) AS media_glucosa,
MAX(nivel_glucosa)
AS máximo_glucosa,
MIN(nivel_glucosa)
AS mínimo_glucosa
FROM
registros_médicos
WHERE paciente_id
IN (SELECT rowid
FROM pacientes
WHERE condición_médica = 'Hipertensión')")
print(registros_hipertensión)
##   paciente_id fecha nivel_glucosa
## 1           2 19570         140.2
## 2           4 19570         160.6
print(estadísticas_glucosa_hipertensión)
##   media_glucosa máximo_glucosa mínimo_glucosa
## 1         150.4          160.6          140.2
#5)Calculad la edad promedio de pacientes con asma por género.
edad_promedio_asma <- dbGetQuery(con, "SELECT género, AVG(edad) AS
edad_promedio
FROM pacientes
WHERE condición_médica = 'Asma'
GROUP BY género")
print(edad_promedio_asma)
##     género edad_promedio
## 1 Femenino            40
#6)Cread un gráfico de barras para mostrar la distribución de género en pacientes con diabetes.
#Es importante recordar cargar los paquetes RSQLite, dplyr y, también, ggplot2.
género_diabetes <- dbGetQuery(con, "SELECT género, COUNT(*) AS cantidad
FROM pacientes
WHERE condición_médica = 'Diabetes'
GROUP BY género")
#Crear un gráfico de barras
ggplot(género_diabetes, aes(x = género, y = cantidad, fill = género)) +
geom_bar(stat = "identity") +
labs(title = "Distribución de Género en Pacientes con Diabetes", x =
"Género", y = "Cantidad") +
theme_minimal()

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.