# Creem el data frame
pacients <- data.frame(Nom = c("Pacient 1", "Pacient 2", "Pacient 3", "Pacient 4", "Pacient 5"),
Gènere = c("Femení", "Masculí", "Femení", "Masculí", "Femení"),
Pressió_arterial = c("120/80", "130/85", "110/70", "140/90", "125/75"),
Colesterol = c(180, 200, 150, 220, 190))
# Filtrem els pacients amb uns nivells de colesterol per sobre de 200
pacients_colesterol <- pacients[pacients$Colesterol > 200,]
# Fem un resum estadístic de la mitjana, mediana, mínim i màxim del filtratge
summary(pacients_colesterol)
## Nom Gènere Pressió_arterial Colesterol
## Length:1 Length:1 Length:1 Min. :220
## Class :character Class :character Class :character 1st Qu.:220
## Mode :character Mode :character Mode :character Median :220
## Mean :220
## 3rd Qu.:220
## Max. :220
# A l'ordre summary li falta la desviació estàndard, però al tenir només una persona, no obtindrem resultat
sd <- sd(pacients_colesterol)
## Warning in is.data.frame(x): NAs introducidos por coerción
## Warning in is.data.frame(x): NAs introducidos por coerción
## Warning in is.data.frame(x): NAs introducidos por coerción
sd
## [1] NA
# Definim variables
genere = "Home"
edat = 23
# Establim la funció
if (genere == "Home") {
if (edat < 10)
greix <- "No registrat"
else if (edat <= 30)
greix <- "12 - 18"
else if (edat <= 40)
greix <- "13-19"
else if (edat <= 50)
greix <- "14-20"
else if (edat <= 60)
greix <- "16 - 20"
else
greix <- "17-21"
}else {
if (edat < 10)
greix <- "No registrat"
else if (edat <= 30)
greix <- "20-26"
else if (edat <= 40)
greix <- "21-27"
else if (edat <= 50)
greix <- "22-28"
else if (edat <= 60)
greix <- "22-30"
else
greix <- "22-31"
}
print(greix)
## [1] "12 - 18"
library("MASS")
# Mitjançant la funció 'table()' obtenim una taula de freqüències dels tractaments
frequencies <- table(anorexia$Treat)
# Un cop tenim les freqüències, dividim aquestes pel nombre de pacients que han passat per algun dels tres tractaments. Finalment multipliquem el resultat per 100, per obtenir el percentatge. Arrodonim a dos decimals
percentatges <- round((frequencies/length(anorexia$Treat))*100, 2)
percentatges
##
## CBT Cont FT
## 40.28 36.11 23.61
Com es pot observar en el resultat:
· Un 40,28% dels pacients han dut a terme el tractament CBT
· Un 36,11% dels pacients han dut a terme el tractament Cont
· Un 23,61% dels pacients ho han fet amb FT
library("MASS")
data("birthwt")
cont <- 0
for (i in 1:length(birthwt$bwt))
if (birthwt$bwt[i] < 2600 && birthwt$age[i] < 20 && birthwt$smoke[i] == 1) {
cont <- cont+1
}
print(cont)
## [1] 7
En aquest cas, tenim 7 nounats nascuts amb menys de 2.600 grams, les mares dels quals son fumadores menors de 20 anys.
# Definim els vectors amb les dades
noms <- c('Anna', 'Lluis', 'Maria', 'Carles', 'Elena')
edats <- c(45, 32, 28, 55, 40)
diagnostics <- c('Diabetis', 'Hipertensió', 'Sa', 'Hipertensió', 'Asma')
glucosa <- c(125, 140, 95, 160, 110)
# Creem la funció
crear_registre_medic <- function(noms, edats, diagnostics, glucosa) {
registre_medic <- data.frame(noms, edats, diagnostics, glucosa)
return(registre_medic)
}
# Cridem la funció
resultats <- crear_registre_medic(noms, edats, diagnostics, glucosa)
print(resultats)
## noms edats diagnostics glucosa
## 1 Anna 45 Diabetis 125
## 2 Lluis 32 Hipertensió 140
## 3 Maria 28 Sa 95
## 4 Carles 55 Hipertensió 160
## 5 Elena 40 Asma 110
library(MASS)
data("birthwt")
pesos <- birthwt$bwt[birthwt$age < 20]
mitjana <- mean(pesos)
mitjana
## [1] 2973.529
plot(pesos, xlab='Index', ylab='Pes (en grams)', main='Distribució de pesos en nounats amb mares menors de 20 anys')
# Comencem amb la funció que calcula l'IMC
# Paràmetres: pes(kg) i altura(m)
calcula_IMC <- function(pes, altura){
imc <- pes / (altura^2)
return(round(imc, 2))
}
calcula_IMC(70, 1.80)
## [1] 21.6
# Fem la funció del percentatge de greix corporal òptim
PGCO <- function(genere, edat){
if (genere == "Home") {
if (edat < 10)
greix <- "No registrat"
else if (edat <= 30)
greix <- "12 - 18%"
else if (edat <= 40)
greix <- "13-19%"
else if (edat <= 50)
greix <- "14-20%"
else if (edat <= 60)
greix <- "16 - 20%"
else
greix <- "17-21%"
} else if (genere == "Dona") {
if (edat < 10)
greix <- "No registrat"
else if (edat <= 30)
greix <- "20-26%"
else if (edat <= 40)
greix <- "21-27%"
else if (edat <= 50)
greix <- "22-28%"
else if (edat <= 60)
greix <- "22-30%"
else
greix <- "22-31%"
}
else {
greix <- "Gènere no trobat"
}
return(greix)
}
PGCO("Dona", 45)
## [1] "22-28%"
PGCO("Alien", 280)
## [1] "Gènere no trobat"
library(MASS)
data("birthwt")
# Creem la funció en que filtrarem per raça (1 simbolitza la raça blanca, font: https://stats4stem.weebly.com/r-birthwt-data.html) i per pes.
mostra_pes <- function(nounat){
mitjana <- mean(birthwt$bwt)
resultat <- nounat[nounat$race == 1 & nounat$bwt < mitjana,]
return(resultat)
}
mostra_pes(birthwt)
## low age lwt race smoke ptl ht ui ftv bwt
## 87 0 20 105 1 1 0 0 0 1 2557
## 88 0 21 108 1 1 0 0 1 2 2594
## 89 0 18 107 1 1 0 0 1 0 2600
## 92 0 22 118 1 0 0 0 0 1 2637
## 94 0 29 123 1 1 0 0 0 1 2663
## 95 0 26 113 1 1 0 0 0 0 2665
## 100 0 18 100 1 1 0 0 0 0 2769
## 101 0 18 100 1 1 0 0 0 0 2769
## 103 0 25 118 1 1 0 0 0 3 2782
## 105 0 28 120 1 1 0 0 0 1 2821
## 107 0 31 100 1 0 0 0 1 3 2835
## 108 0 36 202 1 0 0 0 0 1 2836
## 112 0 28 167 1 0 0 0 0 0 2877
## 113 0 17 122 1 1 0 0 0 0 2906
## 114 0 29 150 1 0 0 0 0 2 2920
## 125 0 27 124 1 1 0 0 0 0 2922
## 10 1 29 130 1 0 0 0 1 2 1021
## 20 1 21 165 1 1 0 1 0 1 1790
## 22 1 32 105 1 1 0 0 0 0 1818
## 23 1 19 91 1 1 2 0 1 0 1885
## 26 1 25 92 1 1 0 0 0 0 1928
## 27 1 20 150 1 1 0 0 0 2 1928
## 29 1 24 155 1 1 1 0 0 0 1936
## 33 1 19 102 1 0 0 0 0 2 2082
## 34 1 19 112 1 1 0 0 1 0 2084
## 35 1 26 117 1 1 1 0 0 0 2084
## 36 1 24 138 1 0 0 0 0 0 2100
## 42 1 22 130 1 1 1 0 1 1 2187
## 45 1 17 110 1 1 0 0 0 0 2225
## 51 1 20 121 1 1 1 0 1 0 2296
## 56 1 31 102 1 1 1 0 0 1 2353
## 57 1 15 110 1 0 0 0 0 0 2353
## 65 1 30 142 1 1 1 0 0 0 2410
## 67 1 22 130 1 1 0 0 0 1 2410
## 68 1 17 120 1 1 0 0 0 3 2414
## 69 1 23 110 1 1 1 0 0 0 2424
## 77 1 26 190 1 1 0 0 0 0 2466
## 79 1 28 95 1 1 0 0 0 2 2466
## 84 1 21 130 1 1 0 1 0 3 2495
library(MASS)
data("Melanoma")
# a)
edat <- c(Melanoma$age)
# Mitjançant summary veiem que el valor mínim és de 4 anys, el màxim és de 85 anys, i la mitjana és de 52,46 anys.
summary(edat)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.00 42.00 54.00 52.46 65.00 95.00
# b) En aquest cas utilitzarem la columna 'status' en que 1 indica que el pacient va morir per melanoma, 2 indica que segueix viu, i 3 que va morir per altres causes
estat_pacient <- function(estat) {
melanoma <- 0
viu <- 0
causes_ext <- 0
estat <- Melanoma$status
for (i in 1:length(Melanoma$status))
if (estat[i] == 1)
melanoma <- melanoma +1
else if (estat[i] == 2)
viu <- viu +1
else if (estat[i] == 3)
causes_ext <- causes_ext +1
return(c(melanoma, viu, causes_ext))
}
print(estat_pacient())
## [1] 57 134 14
# Tenim 57 pacients que van morir degut al Melanoma, 134 pacients vius, i 14 pacients que van morir per causes externes diferents.
# c)
mort_mela <- function(mela){
morts <- mela[mela$status == 1,]
m_homes <- sum(morts$sex == 1)
m_dones <- sum(morts$sex == 0)
m_totals <- nrow(morts)
p_homes <- (m_homes/m_totals) * 100
p_dones <- (m_dones/m_totals) * 100
resultat <- c("Proporció Homes" = p_homes, "Proporció Dones" = p_dones)
return(resultat)
}
print(mort_mela(Melanoma))
## Proporció Homes Proporció Dones
## 50.87719 49.12281
# El treballaré com si accedissim a dades d'una base de dades, per tant, carreguem els paquets
library(sqldf)
## Cargando paquete requerido: gsubfn
## Cargando paquete requerido: proto
## Cargando paquete requerido: RSQLite
library(RSQLite)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following object is masked from 'package:MASS':
##
## select
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# 1) Calculem la mitjana d'Ozone
sqldf("SELECT AVG(Ozone) FROM airquality")
## AVG(Ozone)
## 1 42.12931
# 2) Mostrem les dades pels mesos 5, 6 i 7
sqldf("SELECT Ozone, 'Solar.R', Wind from airquality
WHERE month IN (5, 6, 7)")
## Ozone 'Solar.R' Wind
## 1 41 Solar.R 7.4
## 2 36 Solar.R 8.0
## 3 12 Solar.R 12.6
## 4 18 Solar.R 11.5
## 5 NA Solar.R 14.3
## 6 28 Solar.R 14.9
## 7 23 Solar.R 8.6
## 8 19 Solar.R 13.8
## 9 8 Solar.R 20.1
## 10 NA Solar.R 8.6
## 11 7 Solar.R 6.9
## 12 16 Solar.R 9.7
## 13 11 Solar.R 9.2
## 14 14 Solar.R 10.9
## 15 18 Solar.R 13.2
## 16 14 Solar.R 11.5
## 17 34 Solar.R 12.0
## 18 6 Solar.R 18.4
## 19 30 Solar.R 11.5
## 20 11 Solar.R 9.7
## 21 1 Solar.R 9.7
## 22 11 Solar.R 16.6
## 23 4 Solar.R 9.7
## 24 32 Solar.R 12.0
## 25 NA Solar.R 16.6
## 26 NA Solar.R 14.9
## 27 NA Solar.R 8.0
## 28 23 Solar.R 12.0
## 29 45 Solar.R 14.9
## 30 115 Solar.R 5.7
## 31 37 Solar.R 7.4
## 32 NA Solar.R 8.6
## 33 NA Solar.R 9.7
## 34 NA Solar.R 16.1
## 35 NA Solar.R 9.2
## 36 NA Solar.R 8.6
## 37 NA Solar.R 14.3
## 38 29 Solar.R 9.7
## 39 NA Solar.R 6.9
## 40 71 Solar.R 13.8
## 41 39 Solar.R 11.5
## 42 NA Solar.R 10.9
## 43 NA Solar.R 9.2
## 44 23 Solar.R 8.0
## 45 NA Solar.R 13.8
## 46 NA Solar.R 11.5
## 47 21 Solar.R 14.9
## 48 37 Solar.R 20.7
## 49 20 Solar.R 9.2
## 50 12 Solar.R 11.5
## 51 13 Solar.R 10.3
## 52 NA Solar.R 6.3
## 53 NA Solar.R 1.7
## 54 NA Solar.R 4.6
## 55 NA Solar.R 6.3
## 56 NA Solar.R 8.0
## 57 NA Solar.R 8.0
## 58 NA Solar.R 10.3
## 59 NA Solar.R 11.5
## 60 NA Solar.R 14.9
## 61 NA Solar.R 8.0
## 62 135 Solar.R 4.1
## 63 49 Solar.R 9.2
## 64 32 Solar.R 9.2
## 65 NA Solar.R 10.9
## 66 64 Solar.R 4.6
## 67 40 Solar.R 10.9
## 68 77 Solar.R 5.1
## 69 97 Solar.R 6.3
## 70 97 Solar.R 5.7
## 71 85 Solar.R 7.4
## 72 NA Solar.R 8.6
## 73 10 Solar.R 14.3
## 74 27 Solar.R 14.9
## 75 NA Solar.R 14.9
## 76 7 Solar.R 14.3
## 77 48 Solar.R 6.9
## 78 35 Solar.R 10.3
## 79 61 Solar.R 6.3
## 80 79 Solar.R 5.1
## 81 63 Solar.R 11.5
## 82 16 Solar.R 6.9
## 83 NA Solar.R 9.7
## 84 NA Solar.R 11.5
## 85 80 Solar.R 8.6
## 86 108 Solar.R 8.0
## 87 20 Solar.R 8.6
## 88 52 Solar.R 12.0
## 89 82 Solar.R 7.4
## 90 50 Solar.R 7.4
## 91 64 Solar.R 7.4
## 92 59 Solar.R 9.2
# 3) Ordenem per Month
sqldf("SELECT Ozone, 'Solar.R', Wind, Month from airquality
WHERE month IN (5, 6, 7)
ORDER BY month DESC") #L'ordenem descendentment perquè per defecte, en l'apartat 2) ja estaven ordenats per mesos
## Ozone 'Solar.R' Wind Month
## 1 135 Solar.R 4.1 7
## 2 49 Solar.R 9.2 7
## 3 32 Solar.R 9.2 7
## 4 NA Solar.R 10.9 7
## 5 64 Solar.R 4.6 7
## 6 40 Solar.R 10.9 7
## 7 77 Solar.R 5.1 7
## 8 97 Solar.R 6.3 7
## 9 97 Solar.R 5.7 7
## 10 85 Solar.R 7.4 7
## 11 NA Solar.R 8.6 7
## 12 10 Solar.R 14.3 7
## 13 27 Solar.R 14.9 7
## 14 NA Solar.R 14.9 7
## 15 7 Solar.R 14.3 7
## 16 48 Solar.R 6.9 7
## 17 35 Solar.R 10.3 7
## 18 61 Solar.R 6.3 7
## 19 79 Solar.R 5.1 7
## 20 63 Solar.R 11.5 7
## 21 16 Solar.R 6.9 7
## 22 NA Solar.R 9.7 7
## 23 NA Solar.R 11.5 7
## 24 80 Solar.R 8.6 7
## 25 108 Solar.R 8.0 7
## 26 20 Solar.R 8.6 7
## 27 52 Solar.R 12.0 7
## 28 82 Solar.R 7.4 7
## 29 50 Solar.R 7.4 7
## 30 64 Solar.R 7.4 7
## 31 59 Solar.R 9.2 7
## 32 NA Solar.R 8.6 6
## 33 NA Solar.R 9.7 6
## 34 NA Solar.R 16.1 6
## 35 NA Solar.R 9.2 6
## 36 NA Solar.R 8.6 6
## 37 NA Solar.R 14.3 6
## 38 29 Solar.R 9.7 6
## 39 NA Solar.R 6.9 6
## 40 71 Solar.R 13.8 6
## 41 39 Solar.R 11.5 6
## 42 NA Solar.R 10.9 6
## 43 NA Solar.R 9.2 6
## 44 23 Solar.R 8.0 6
## 45 NA Solar.R 13.8 6
## 46 NA Solar.R 11.5 6
## 47 21 Solar.R 14.9 6
## 48 37 Solar.R 20.7 6
## 49 20 Solar.R 9.2 6
## 50 12 Solar.R 11.5 6
## 51 13 Solar.R 10.3 6
## 52 NA Solar.R 6.3 6
## 53 NA Solar.R 1.7 6
## 54 NA Solar.R 4.6 6
## 55 NA Solar.R 6.3 6
## 56 NA Solar.R 8.0 6
## 57 NA Solar.R 8.0 6
## 58 NA Solar.R 10.3 6
## 59 NA Solar.R 11.5 6
## 60 NA Solar.R 14.9 6
## 61 NA Solar.R 8.0 6
## 62 41 Solar.R 7.4 5
## 63 36 Solar.R 8.0 5
## 64 12 Solar.R 12.6 5
## 65 18 Solar.R 11.5 5
## 66 NA Solar.R 14.3 5
## 67 28 Solar.R 14.9 5
## 68 23 Solar.R 8.6 5
## 69 19 Solar.R 13.8 5
## 70 8 Solar.R 20.1 5
## 71 NA Solar.R 8.6 5
## 72 7 Solar.R 6.9 5
## 73 16 Solar.R 9.7 5
## 74 11 Solar.R 9.2 5
## 75 14 Solar.R 10.9 5
## 76 18 Solar.R 13.2 5
## 77 14 Solar.R 11.5 5
## 78 34 Solar.R 12.0 5
## 79 6 Solar.R 18.4 5
## 80 30 Solar.R 11.5 5
## 81 11 Solar.R 9.7 5
## 82 1 Solar.R 9.7 5
## 83 11 Solar.R 16.6 5
## 84 4 Solar.R 9.7 5
## 85 32 Solar.R 12.0 5
## 86 NA Solar.R 16.6 5
## 87 NA Solar.R 14.9 5
## 88 NA Solar.R 8.0 5
## 89 23 Solar.R 12.0 5
## 90 45 Solar.R 14.9 5
## 91 115 Solar.R 5.7 5
## 92 37 Solar.R 7.4 5
# 4) Mostrem Wind agrupat per 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
# a) creem la funció
fibonacci <- function(n){
# Creem un seguro per nombres no permesos en la funció, per evitar que peti
if (n == 1) return (0)
if (n == 2) return(c(0,1))
if (n < 0) return ("Introdueix un valor positiu")
num <- c(0,1) # Els dos primers nombres de Fibonacci, la funció necessita dos nombres per començar a calcular
for (i in 3:n){ # El bucle ha de començar per la posició 3, perque ja hem definit 0 i 1
num[i] <- num[i-1] + num[i-2]
}
return(num)
}
fibonacci(12)
## [1] 0 1 1 2 3 5 8 13 21 34 55 89
# b) Veiem que en el la prova per l'apartat a) apareixen ambdós valors, 21 i 34, específicament en les posicions:
fibonacci(9)
## [1] 0 1 1 2 3 5 8 13 21
fibonacci(10)
## [1] 0 1 1 2 3 5 8 13 21 34
# c)
fibonacci_v2 <- function(n){
# al no poder dividir per 0, n ha de ser major o igual a 2:
if (n<2) return ("Introdueix un valor superior o igual a 2")
valor <- fibonacci(n)
auria <- numeric(n)
for (i in 2:n){
auria[i] <- valor[i]/valor[i-1]
}
return(auria)
}
fibonacci_v2(20)
## [1] 0.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 1.618037
## [17] 1.618033 1.618034 1.618034 1.618034
# Com podem veure en els resultats, a n=14, el valor és de 1.618056, que és el primer valor que més s'assembla a la Raó Àuria, però a major n, més s'acosta el valor a la Raó
# Primer de tot, desenvolupem una funció que generi una seqüència a l'atzar mitjançant 'sample()'
generar_adn <- function(n){
bases <- c("A", "C", "T", "G")
seq <- sample(bases, n, replace = TRUE)
return(paste(seq, collapse = "")) # Retornem el vector unificat en un sol string
}
# Generem la funció per calcular l'invers
invers_adn <- function(seq){
bases_ind <- strsplit(seq, split ="")[[1]] # Primer obtenim les bases individuals dividint l'string
invers <- rev(bases_ind) # A partir de les bases, generem l'ordre revers
return(paste(invers, collapse = ""))
}
# Generem la funció pel complementari
compl_adn <- function(seq){
compl <- chartr("ATGC", "TACG", seq)
return(compl)
}
prova <- generar_adn(35)
prova_inv <- invers_adn(prova)
prova_compl <- compl_adn(prova)
cat("Seqüència", prova,'\n',
"Inversa", prova_inv, '\n',
"Complementaria", prova_compl)
## Seqüència AGAAACCCGCGCTACGCCTTCGAAGGTGATCCTAT
## Inversa TATCCTAGTGGAAGCTTCCGCATCGCGCCCAAAGA
## Complementaria TCTTTGGGCGCGATGCGGAAGCTTCCACTAGGATA
library(ggplot2)
library(RSQLite)
library(dplyr)
# 1)
# Creem una connexió amb la bdd
con <- dbConnect(SQLite(), dbname = "hospital.db")
# Inserim les dades en taules, primer en pacients
dbExecute(con, "DROP TABLE IF EXISTS pacients")
## [1] 0
dbExecute(con, "DROP TABLE IF EXISTS registres_medics")
## [1] 0
dbExecute(con, "CREATE TABLE pacients(
nom TEXT,
edat INTEGER,
genere TEXT,
condicio_medica TEXT)")
## [1] 0
dbExecute(con, "INSERT INTO pacients (nom, edat, genere, condicio_medica) VALUES
('Pacient1', 45, 'Femeni', 'Diabetis'),
('Pacient2', 32, 'Masculi', 'Hipertensio'),
('Pacient3', 28, 'Femeni', 'Sa'),
('Pacient4', 55, 'Masculi', 'Hipertensio'),
('Pacient5', 40, 'Femeni', 'Asma')")
## [1] 5
# I ara en registres_medics
dbExecute(con, "CREATE TABLE registres_medics(
pacient_id INTEGER,
data TEXT,
nivell_glucosa FLOAT)")
## [1] 0
dbExecute(con, "INSERT INTO registres_medics (pacient_id, data, nivell_glucosa) VALUES
(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)
")
## [1] 5
# 2)
diabetics <- dbGetQuery(con, "SELECT * FROM pacients WHERE condicio_medica = 'Diabetis'")
print(diabetics)
## nom edat genere condicio_medica
## 1 Pacient1 45 Femeni Diabetis
# 3)
stats <- dbGetQuery(con, "SELECT
AVG(nivell_glucosa) AS mitjana,
MIN(nivell_glucosa) AS minim,
MAX(nivell_glucosa) AS maxim
FROM registres_medics")
print(stats)
## mitjana minim maxim
## 1 126.6 95.8 160.6
# 4) Com la informació està en dues taules separades, hem d'unir-les mitjançant JOIN
query_hiper <- "
SELECT p.nom, p.condicio_medica, r.data, r.nivell_glucosa
FROM pacients p
JOIN registres_medics r ON p.rowid = r.pacient_id
WHERE p.condicio_medica = 'Hipertensio'"
hipertensos <- dbGetQuery(con, query_hiper)
print(hipertensos)
## nom condicio_medica data nivell_glucosa
## 1 Pacient2 Hipertensio 2023-08-01 140.2
## 2 Pacient4 Hipertensio 2023-08-01 160.6
# 5)
mitjanes_asma <- dbGetQuery(con, "SELECT genere, AVG(edat) AS edat_mitjana FROM pacients WHERE condicio_medica = 'Asma' GROUP BY genere")
print(mitjanes_asma)
## genere edat_mitjana
## 1 Femeni 40
# 6)
genere_diabetis <- dbGetQuery(con, "SELECT genere, COUNT(*) AS quantitat
FROM pacients
WHERE condicio_medica = 'Diabetis'
GROUP BY genere")
# Fem el gràfic amb ggplot2
ggplot(genere_diabetis, aes(x = genere, y = quantitat, fill = genere)) +
geom_col() +
labs(title = "Distribució de Gènere en Pacients amb Diabetis", x =
"Gènere", y = "Quantitat")