Laboratorio 1, 09/03/2026

Ejercicio 1

Utilizando las funciones citadas en este Laboratorio, comprobad qué paquetes tenéis instalados en vuestra versión de RStudio e instalad el paquete MASS y el paquete Survival y comprobad la información que contienen.

La resolución de este apartado se realiza mediante el comando library(). Debajo se adjunta una imagen ilustrativa de la ventana que devuelve.

library()
Figura 1: Resultado del comando library()
Figura 1: Resultado del comando library()

Para instalar los paquetes mencionados, usaremos install.packages().

install.packages(c("MASS", "survival"), repos = "https://cran.rstudio.com/")
## Installing packages into 'C:/Users/Robert TM/AppData/Local/R/win-library/4.5'
## (as 'lib' is unspecified)
## package 'MASS' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'MASS'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problem copying
## C:\Users\Robert
## TM\AppData\Local\R\win-library\4.5\00LOCK\MASS\libs\x64\MASS.dll to
## C:\Users\Robert TM\AppData\Local\R\win-library\4.5\MASS\libs\x64\MASS.dll:
## Permission denied
## Warning: restored 'MASS'
## package 'survival' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\Robert TM\AppData\Local\Temp\RtmpmAs1Rw\downloaded_packages

Buscad información sobre el paquete Rcmdr (R Commander) desde la consola. En este caso, usaremos ??Rcmdr para que en las ventana Help de RStudio nos aparezca lo que nos indica la siguiente imagen.

??Rcmdr
Figura 2: Resultado del comando ??Rcmdr
Figura 2: Resultado del comando ??Rcmdr

Ejercicio 2

a) Importad un archivo de texto y buscad un summary() de tres variables que escojáis.

A partir del paquete faraway, escogeré una base de datos y escogeré uno de las bases de datos. Con ella generaré un txt en el directorio de trabajo del laboratorio y lo importaré con otro nombre distinto al objeto original. Sobre el nuevo objeto, usaré el comando summary().

setwd("C:/Users/Robert TM/Desktop/Master UOC/Semestre 1/M0.153 - Software para el análisis de datos/Lab1")
library(faraway)
write.table(uswages, file = "uswages.txt")
data_set = read.table("uswages.txt")
summary(data_set[c("wage","educ","exper")])
##       wage              educ           exper      
##  Min.   :  50.39   Min.   : 0.00   Min.   :-2.00  
##  1st Qu.: 308.64   1st Qu.:12.00   1st Qu.: 8.00  
##  Median : 522.32   Median :12.00   Median :15.00  
##  Mean   : 608.12   Mean   :13.11   Mean   :18.41  
##  3rd Qu.: 783.48   3rd Qu.:16.00   3rd Qu.:27.00  
##  Max.   :7716.05   Max.   :18.00   Max.   :59.00

b) Importad un archivo «.csv» y buscad un fivenum() de dos variables que os parezcan relevantes para el estudio.

El proceso es similar al anterior, cambiando los comandos de table por csv.

write.csv(diabetes, file = "diabetes.csv")
data_set2 = read.csv("diabetes.csv")
fivenum(data_set2$stab.glu)
## [1]  48  81  89 106 385
fivenum(data_set2$chol)
## [1]  78 179 204 230 443

Ejercicio 3

A partir del conjunto de datos anorexia del paquete MASS, que corresponden a los datos de cambio de peso de pacientes jóvenes con anorexia, mostrad los tipos de datos que contiene y comprobad si existen valores NA y NULL. Para la variable Treat, transformad los valores «CBT», «Cont» y «FT» en «Cogn Beh Tr», «Contr» y «Fam Tr», respectivamente.

#Primero, se crea un dataframe para trabajar con los datos
anorexia = data.frame(MASS::anorexia)
summary(anorexia)
##   Treat        Prewt           Postwt      
##  CBT :29   Min.   :70.00   Min.   : 71.30  
##  Cont:26   1st Qu.:79.60   1st Qu.: 79.33  
##  FT  :17   Median :82.30   Median : 84.05  
##            Mean   :82.41   Mean   : 85.17  
##            3rd Qu.:86.00   3rd Qu.: 91.55  
##            Max.   :94.90   Max.   :103.60
#Mediante los comandos is.na y is.null buscamos valores que falten o que sean NA
table(is.na(anorexia))
## 
## FALSE 
##   216
table(is.null(anorexia))
## 
## FALSE 
##     1
#Por último, usamos factor para cambiar los valores actuales por unos nuevos, usando levels y labels
anorexia$Treat = factor(x = anorexia$Treat, levels = c("Cont", "CBT", "FT"), labels = c("Contr", "Cogn Beh Tr", "Fam Tr"))
summary(anorexia)
##          Treat        Prewt           Postwt      
##  Contr      :26   Min.   :70.00   Min.   : 71.30  
##  Cogn Beh Tr:29   1st Qu.:79.60   1st Qu.: 79.33  
##  Fam Tr     :17   Median :82.30   Median : 84.05  
##                   Mean   :82.41   Mean   : 85.17  
##                   3rd Qu.:86.00   3rd Qu.: 91.55  
##                   Max.   :94.90   Max.   :103.60

Ejercicio 4

a) Exportad los datos biopsy del paquete MASS a un archivo «.csv.»

write.csv(MASS::biopsy, file = "C:/Users/Robert TM/Desktop/Master UOC/Semestre 1/M0.153 - Software para el análisis de datos/Lab1/biopsy_mass.csv")

b) Exportad los datos melanoma del paquete MASS a archivos de tres diferentes formatos y comprobad que se han creado los diferentes archivos en los formatos y las rutas especificados. Podéis generar una captura de pantalla de su ubicación en la carpeta.

write.csv(MASS::Melanoma, file = "C:/Users/Robert TM/Desktop/Master UOC/Semestre 1/M0.153 - Software para el análisis de datos/Lab1/4a_melanoma_mass.csv")
write.table(MASS::Melanoma, file = "C:/Users/Robert TM/Desktop/Master UOC/Semestre 1/M0.153 - Software para el análisis de datos/Lab1/4a_melanoma_mass.txt")
xlsx::write.xlsx(MASS::Melanoma, file = "C:/Users/Robert TM/Desktop/Master UOC/Semestre 1/M0.153 - Software para el análisis de datos/Lab1/4a_melanoma_mass.xlsx")
Figura 3: Comprobación de la exportación de las tablas en distinto formato
Figura 3: Comprobación de la exportación de las tablas en distinto formato

c) Generad un resumen (summary) de la variable age de melanoma y guardad la salida que os aparece en un documento .doc

summary(MASS::Melanoma$age)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    4.00   42.00   54.00   52.46   65.00   95.00
capture.output(summary(MASS::Melanoma$age), file  ="age_melanoma_MASS.doc")

d) Buscad un data frame en algún repositorio de datos de Biomedicina, descargad un conjunto de datos en «.csv» e importad este fichero a un documento R Markdown usando el código o el menú de importación de RStudio.

Para este ejercio, se ha descargado el fichero csv correspondiente del siguiente enlace: Enlace datos vacunación gripe.

Mediante la función “read.csv()” importaremos dichos datos y los importaremos a este mismo fichero.

vacunacion = read.csv(file = "C:/Users/Robert TM/Desktop/Master UOC/Semestre 1/M0.153 - Software para el análisis de datos/Lab1/Vaccines.gov__Flu_vaccinating_provider_locations_20260306.csv")
summary(vacunacion)
##  provider_location_guid loc_store_no        loc_phone        
##  Length:202652          Length:202652      Length:202652     
##  Class :character       Class :character   Class :character  
##  Mode  :character       Mode  :character   Mode  :character  
##                                                              
##                                                              
##                                                              
##                                                              
##    loc_name         loc_admin_street1  loc_admin_street2  loc_admin_city    
##  Length:202652      Length:202652      Length:202652      Length:202652     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##  loc_admin_state    loc_admin_zip      sunday_hours       monday_hours      
##  Length:202652      Length:202652      Length:202652      Length:202652     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##  tuesday_hours      wednesday_hours    thursday_hours     friday_hours      
##  Length:202652      Length:202652      Length:202652      Length:202652     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##  saturday_hours     web_address         pre_screen        insurance_accepted
##  Length:202652      Length:202652      Length:202652      Length:202652     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##  walkins_accepted   provider_notes     searchable_name      in_stock        
##  Length:202652      Length:202652      Length:202652      Length:202652     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##   supply_level      quantity_last_updated    latitude       longitude      
##  Min.   :-1.00000   Length:202652         Min.   :17.96   Min.   :-176.66  
##  1st Qu.: 0.00000   Class :character      1st Qu.:33.70   1st Qu.: -97.56  
##  Median : 0.00000   Mode  :character      Median :38.60   Median : -85.66  
##  Mean   : 0.02439                         Mean   :37.40   Mean   : -90.83  
##  3rd Qu.: 0.00000                         3rd Qu.:41.32   3rd Qu.: -78.69  
##  Max.   : 4.00000                         Max.   :71.30   Max.   : -64.89  
##                                           NA's   :12      NA's   :12       
##    category        
##  Length:202652     
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
## 
head(vacunacion)
##                 provider_location_guid   loc_store_no      loc_phone
## 1 67e6d015-eba0-435d-8d64-0ea4509ec286             38 (508) 248-5473
## 2 ceb510b6-c6e0-4806-b8ab-abd45d29f57f         Oct-43   2074743013.0
## 3 aa4f1d1f-c5d9-49b6-b0b0-e00fb1ce18e8         281392   402-223-4779
## 4 31713779-6a1a-4d55-af37-858b50d25be4           5966 (954) 921-7747
## 5 2026f82a-e2a6-477c-84b3-42edbb432606        10-1560   7024510774.0
## 6 1ae5581a-6145-4b46-bfe1-3671374f7e60 Not applicable   410-272-1811
##                                           loc_name     loc_admin_street1
## 1                           CVS Pharmacy, Inc. #38     142 WORCESTER RD.
## 2                              Walmart Inc #Oct-43 60 Fairgrounds Mkt Pl
## 3                          DEINES PHARMACY #281392          910 COURT ST
## 4                         CVS Pharmacy, Inc. #5966   1600 S. FEDERAL HWY
## 5                             Walmart Inc #10-1560    6005 S Eastern Ave
## 6 Kleins Shoprite Pharmacy 551 - Riverside Parkway   1321 Riverside Pkwy
##   loc_admin_street2 loc_admin_city loc_admin_state loc_admin_zip
## 1                    CHARLTON CITY              MA          1507
## 2                        Skowhegan              ME    04976-1367
## 3                         BEATRICE              NE         68310
## 4                        HOLLYWOOD              FL         33020
## 5                        Las Vegas              NV    89119-3135
## 6                          BELCAMP              MD    21017-1388
##         sunday_hours      monday_hours     tuesday_hours   wednesday_hours
## 1 10:00 AM - 6:00 PM 9:00 AM - 9:00 PM 9:00 AM - 9:00 PM 9:00 AM - 9:00 PM
## 2 10:00 AM - 4:00 PM 8:00 AM - 7:00 PM 8:00 AM - 7:00 PM 8:00 AM - 7:00 PM
## 3                                                                         
## 4 11:00 AM - 5:00 PM 9:00 AM - 8:00 PM 9:00 AM - 8:00 PM 9:00 AM - 8:00 PM
## 5 10:00 AM - 6:00 PM 9:00 AM - 7:00 PM 9:00 AM - 7:00 PM 9:00 AM - 7:00 PM
## 6                                                                         
##      thursday_hours      friday_hours     saturday_hours
## 1 9:00 AM - 9:00 PM 9:00 AM - 9:00 PM  9:00 AM - 6:00 PM
## 2 8:00 AM - 7:00 PM 8:00 AM - 7:00 PM  8:00 AM - 6:00 PM
## 3                                                       
## 4 9:00 AM - 8:00 PM 9:00 AM - 8:00 PM 10:00 AM - 6:00 PM
## 5 9:00 AM - 7:00 PM 9:00 AM - 7:00 PM  9:00 AM - 7:00 PM
## 6                                                       
##                                                   web_address
## 1 https://www.cvs.com/store-locator/details-directions/000038
## 2                          https://www.walmart.com/store/2143
## 3                                                            
## 4 https://www.cvs.com/store-locator/details-directions/005966
## 5                          https://www.walmart.com/store/1560
## 6                                                            
##                                                                                pre_screen
## 1                                        https://www.cvs.com/immunizations/get-vaccinated
## 2 https://www.walmart.com/pharmacy/clinical-services/immunization/scheduled?imzType=covid
## 3                                                                                        
## 4                                        https://www.cvs.com/immunizations/get-vaccinated
## 5 https://www.walmart.com/pharmacy/clinical-services/immunization/scheduled?imzType=covid
## 6                                                                                        
##   insurance_accepted walkins_accepted
## 1               true             true
## 2               true             true
## 3                                    
## 4               true             true
## 5               true             true
## 6                                    
##                                                                                          provider_notes
## 1 It is highly recommended to make an appointment for pediatric (5-11 years old) COVID-19 vaccinations.
## 2                                                                                                      
## 3                                                                                                      
## 4 It is highly recommended to make an appointment for pediatric (5-11 years old) COVID-19 vaccinations.
## 5                                                                                                      
## 6                                                                                                      
##                           searchable_name in_stock supply_level
## 1                                Flu Shot    false            0
## 2                                Flu Shot    false            0
## 3 Flu Shot (65+, high-dose or adjuvanted)     true            4
## 4                                Flu Shot    false            0
## 5                     Flu Shot (Egg free)    false            0
## 6 Flu Shot (65+, high-dose or adjuvanted)    false            1
##   quantity_last_updated latitude  longitude category
## 1            2024-08-01 42.14504  -71.96857 seasonal
## 2            2024-08-01 44.78032  -69.73117 seasonal
## 3            2024-05-14 40.26619  -96.74179 seasonal
## 4            2024-07-22 25.99723  -80.14329 seasonal
## 5            2024-08-01 36.08035 -115.12188 seasonal
## 6            2024-05-16 39.48003  -76.24737 seasonal

Ejercicio 5

En el siguiente ejemplo veremos cómo utilizar diferentes operadores sobre el conjunto de datos birthwt, así como también algunas funciones que nos permiten obtener más información de las variables:

Ejecutamos summary sobre los datos para responder a los primeros apartados.

dataset = MASS::birthwt
summary(dataset)
##       low              age             lwt             race      
##  Min.   :0.0000   Min.   :14.00   Min.   : 80.0   Min.   :1.000  
##  1st Qu.:0.0000   1st Qu.:19.00   1st Qu.:110.0   1st Qu.:1.000  
##  Median :0.0000   Median :23.00   Median :121.0   Median :1.000  
##  Mean   :0.3122   Mean   :23.24   Mean   :129.8   Mean   :1.847  
##  3rd Qu.:1.0000   3rd Qu.:26.00   3rd Qu.:140.0   3rd Qu.:3.000  
##  Max.   :1.0000   Max.   :45.00   Max.   :250.0   Max.   :3.000  
##      smoke             ptl               ht                ui        
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.00000   Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.00000   1st Qu.:0.0000  
##  Median :0.0000   Median :0.0000   Median :0.00000   Median :0.0000  
##  Mean   :0.3915   Mean   :0.1958   Mean   :0.06349   Mean   :0.1481  
##  3rd Qu.:1.0000   3rd Qu.:0.0000   3rd Qu.:0.00000   3rd Qu.:0.0000  
##  Max.   :1.0000   Max.   :3.0000   Max.   :1.00000   Max.   :1.0000  
##       ftv              bwt      
##  Min.   :0.0000   Min.   : 709  
##  1st Qu.:0.0000   1st Qu.:2414  
##  Median :0.0000   Median :2977  
##  Mean   :0.7937   Mean   :2945  
##  3rd Qu.:1.0000   3rd Qu.:3487  
##  Max.   :6.0000   Max.   :4990

a) ¿Cuál es la edad máxima de las madres del conjunto de datos?

Según la tabla, la edad maxima es 45. Sin recurrir a summary(), la forma de responder sería:

max(dataset$age)
## [1] 45

b) ¿Cuál es la edad mínima de las madres del conjunto de datos?

Según la tabla, la edad mínima es 14. Sin recurrir a summary(), la forma de responder sería:

min(dataset$age)
## [1] 14

c) ¿Cuál es el rango de edad de las madres?

Definiendo el rango como la diferencia entre el máximo y el mínimo, el rango sería:

max(dataset$age) - min(dataset$age)
## [1] 31

d) ¿Fumaba la madre cuyo recién nacido era el de menor peso?

Consultamos la información sobre el dataset y vemos que bwt da el peso del bebe al nacimiento.

dataset$smoke[dataset$bwt == min(dataset$bwt)]
## [1] 1

La respuesta es 1, que por tanto es sí, fumaba.

e) ¿Cuánto pesó el recién nacido cuya madre tenía la edad máxima?

dataset$bwt[dataset$age == max(dataset$age)]
## [1] 4990

El bebé pesó 4990 gramos.

f) Listad los pesos de los recién nacidos, cuyas madres visitarán menos de dos veces al médico durante el primer trimestre.

La variable ftv indica el número de visitas al medico en el primer trimestre. Por tanto:

dataset$bwt[dataset$ftv < 2]
##   [1] 2523 2557 2600 2622 2637 2637 2663 2665 2722 2733 2751 2769 2769 2778 2807
##  [16] 2821 2836 2863 2877 2906 2920 2920 2920 2948 2948 2977 2977 2922 3033 3062
##  [31] 3062 3062 3062 3090 3090 3100 3104 3132 3175 3175 3203 3203 3203 3225 3225
##  [46] 3232 3234 3260 3274 3317 3317 3331 3374 3374 3402 3416 3444 3459 3460 3473
##  [61] 3544 3487 3544 3572 3572 3586 3600 3614 3614 3629 3637 3643 3651 3651 3651
##  [76] 3651 3699 3728 3756 3770 3770 3770 3790 3799 3827 3884 3912 3940 3941 3941
##  [91] 3969 3997 3997 4054 4054 4111 4174 4238 4593 4990  709 1135 1330 1474 1588
## [106] 1588 1701 1729 1790 1818 1885 1893 1899 1928 1936 1970 2055 2055 2084 2084
## [121] 2100 2125 2187 2187 2211 2225 2240 2240 2282 2296 2296 2325 2353 2353 2367
## [136] 2381 2381 2381 2410 2410 2410 2424 2442 2466 2466 2495 2495
length(dataset$bwt[dataset$ftv < 2])
## [1] 147

En total, 177 bebes cumplieron la condición indicada.

Ejercicio 6

A partir del conjunto de datos anorexia trabajado en apartados anteriores, cread una matriz que tenga como columnas los valores de Prewt y Postwt, y cada fila sean los valores correspondientes para cada posición.

A partir del dataset, seleccionamos las columnas de interés y las convertimos en una matriz mediante la función as.matrix().

dataset = MASS::anorexia
summary(dataset)
##   Treat        Prewt           Postwt      
##  CBT :29   Min.   :70.00   Min.   : 71.30  
##  Cont:26   1st Qu.:79.60   1st Qu.: 79.33  
##  FT  :17   Median :82.30   Median : 84.05  
##            Mean   :82.41   Mean   : 85.17  
##            3rd Qu.:86.00   3rd Qu.: 91.55  
##            Max.   :94.90   Max.   :103.60
ano_mat = matrix(c(dataset$Prewt,dataset$Postwt), ncol = 2)
head(ano_mat)
##      [,1] [,2]
## [1,] 80.7 80.2
## [2,] 89.4 80.1
## [3,] 91.8 86.4
## [4,] 74.0 86.3
## [5,] 78.1 76.1
## [6,] 88.3 78.1
class(ano_mat)
## [1] "matrix" "array"

Ejercicio 7

Copia el código siguiente en tu consola para generar un data frame con veinticinco registros y seis variables, y responde a los siguientes apartados:

Identificador <- c("I1","I2","I3","I4","I5","I6","I7","I8","I9","I10","I11","I12","I13","I14", "I15","I16","I17","I18","I19","I20","I21","I22","I23","I24","I25")
Edad <- c(23,24,21,22,23,25,26,24,21,22,23,25,26,24,22,21,25,26,24,21,25,27,26,22,29)
Sexo <-c(1,2,1,1,1,2,2,2,1,2,1,2,2,2,1,1,1,2,2,2,1,2,1,1,2) #1 para mujeres y 2 para hombres
Peso <- c(76.5,81.2,79.3,59.5,67.3,78.6,67.9,100.2,97.8,56.4,65.4,67.5,87.4,99.7,87.6,93.4,65.4,73.7,85.1,61.2,54.8,103.4,65.8,71.7,85.0)
Alt <- c(165,154,178,165,164,175,182,165,178,165,158,183,184,164,189,167,182,179,165,158,183,184,189,166,175) #altura en cm
Fuma <- c("SI","NO","SI","SI","NO","NO","NO","SI","SI","SI","NO","NO","SI","SI","SI","SI","NO","NO","SI","SI","SI","NO","SI","NO","SI")
Trat_Pulmon <- data.frame(Identificador,Edad,Sexo,Peso,Alt,Fuma)
Trat_Pulmon
##    Identificador Edad Sexo  Peso Alt Fuma
## 1             I1   23    1  76.5 165   SI
## 2             I2   24    2  81.2 154   NO
## 3             I3   21    1  79.3 178   SI
## 4             I4   22    1  59.5 165   SI
## 5             I5   23    1  67.3 164   NO
## 6             I6   25    2  78.6 175   NO
## 7             I7   26    2  67.9 182   NO
## 8             I8   24    2 100.2 165   SI
## 9             I9   21    1  97.8 178   SI
## 10           I10   22    2  56.4 165   SI
## 11           I11   23    1  65.4 158   NO
## 12           I12   25    2  67.5 183   NO
## 13           I13   26    2  87.4 184   SI
## 14           I14   24    2  99.7 164   SI
## 15           I15   22    1  87.6 189   SI
## 16           I16   21    1  93.4 167   SI
## 17           I17   25    1  65.4 182   NO
## 18           I18   26    2  73.7 179   NO
## 19           I19   24    2  85.1 165   SI
## 20           I20   21    2  61.2 158   SI
## 21           I21   25    1  54.8 183   SI
## 22           I22   27    2 103.4 184   NO
## 23           I23   26    1  65.8 189   SI
## 24           I24   22    1  71.7 166   NO
## 25           I25   29    2  85.0 175   SI

a) Seleccionad los registros con edad > 22.

subset(Trat_Pulmon, subset = Edad > 22)
##    Identificador Edad Sexo  Peso Alt Fuma
## 1             I1   23    1  76.5 165   SI
## 2             I2   24    2  81.2 154   NO
## 5             I5   23    1  67.3 164   NO
## 6             I6   25    2  78.6 175   NO
## 7             I7   26    2  67.9 182   NO
## 8             I8   24    2 100.2 165   SI
## 11           I11   23    1  65.4 158   NO
## 12           I12   25    2  67.5 183   NO
## 13           I13   26    2  87.4 184   SI
## 14           I14   24    2  99.7 164   SI
## 17           I17   25    1  65.4 182   NO
## 18           I18   26    2  73.7 179   NO
## 19           I19   24    2  85.1 165   SI
## 21           I21   25    1  54.8 183   SI
## 22           I22   27    2 103.4 184   NO
## 23           I23   26    1  65.8 189   SI
## 25           I25   29    2  85.0 175   SI

b) Seleccionad el elemento 3 de la columna 4 del conjunto de datos (contando el identificador).

Trat_Pulmon[3,4]
## [1] 79.3

c) Usad el comando subset() para seleccionar todas las filas que tienen una edad menor que 27 años y sin incluir la columna Alt.

subset(Trat_Pulmon, subset = Edad <27 ,select = -Alt)
##    Identificador Edad Sexo  Peso Fuma
## 1             I1   23    1  76.5   SI
## 2             I2   24    2  81.2   NO
## 3             I3   21    1  79.3   SI
## 4             I4   22    1  59.5   SI
## 5             I5   23    1  67.3   NO
## 6             I6   25    2  78.6   NO
## 7             I7   26    2  67.9   NO
## 8             I8   24    2 100.2   SI
## 9             I9   21    1  97.8   SI
## 10           I10   22    2  56.4   SI
## 11           I11   23    1  65.4   NO
## 12           I12   25    2  67.5   NO
## 13           I13   26    2  87.4   SI
## 14           I14   24    2  99.7   SI
## 15           I15   22    1  87.6   SI
## 16           I16   21    1  93.4   SI
## 17           I17   25    1  65.4   NO
## 18           I18   26    2  73.7   NO
## 19           I19   24    2  85.1   SI
## 20           I20   21    2  61.2   SI
## 21           I21   25    1  54.8   SI
## 23           I23   26    1  65.8   SI
## 24           I24   22    1  71.7   NO

Ejercicio 8

Incorporad el dataset ChickWeight que contiene información sobre el peso de 578 pollitos en gramos (weight), el tiempo desde la medición al nacer (Time), una variable identificadora de cada pollito (Chick) a partir del rango de peso y una variable factor con el tipo de dieta experimental que cada pollito recibió (Diet). (Para más información sobre ChickWeight: https://rdrr.io/r/datasets/ChickWeight.html)

a) Incorporad el conjunto de datos ChickWeight del paquete datasets a vuestro entorno de trabajo.

dataset = datasets::ChickWeight

b) Generad un gráfico de dispersión de la variable weight.

plot(sort(dataset$weight), type = "p", main = "Gráfico de Pesos (ordenado)", ylab = "Weight (grams)")

c) Cread un diagrama de caja con la variable Time.

boxplot(dataset$Time, main = "Diagrama de cajas de Time", xlab = "Time", col = "#7FFFD4")

Ejercicio 9

A partir del conjunto de datos anorexia del paquete MASS, cread otro data frame que se llame anorexia_treat_df formado por Treat y por un vector nuevo calculado a partir de la diferencia Prewt-Postwt. De esta manera, nos quedará un data frame que contenga el tipo de tratamiento y el valor del peso ganado o perdido después de haber realizado el tratamiento. Seleccionad aquellos individuos que han ganado peso después del tratamiento y cread un nuevo conjunto llamado anorexia_treat_C_df que contenga solo los datos de aquellos que han seguido el tratamiento «Cont» y que han ganado peso después del tratamiento.

#Primero creamos un objeto con la información de los datos de anorexia
dataset = MASS::anorexia
head(dataset)
##   Treat Prewt Postwt
## 1  Cont  80.7   80.2
## 2  Cont  89.4   80.1
## 3  Cont  91.8   86.4
## 4  Cont  74.0   86.3
## 5  Cont  78.1   76.1
## 6  Cont  88.3   78.1
#Creamos el dataframe propuesto, con Treat y la diferencia Prewt-Postwt
anorexia_treat_df = cbind.data.frame(dataset["Treat"],  dataset["Prewt"]-dataset["Postwt"])
colnames(anorexia_treat_df) = c("Treat", "diffwt")
head(anorexia_treat_df)
##   Treat diffwt
## 1  Cont    0.5
## 2  Cont    9.3
## 3  Cont    5.4
## 4  Cont  -12.3
## 5  Cont    2.0
## 6  Cont   10.2
#Seleccionamos: a) tratamiento cont, b) ganado peso (mayor que cero)
anorexia_treat_C_df = subset.data.frame(anorexia_treat_df, subset = Treat == "Cont" & diffwt > 0)
head(anorexia_treat_C_df)
##   Treat diffwt
## 1  Cont    0.5
## 2  Cont    9.3
## 3  Cont    5.4
## 5  Cont    2.0
## 6  Cont   10.2
## 7  Cont   12.2

Ejercicio 10

Entrad en RPubs y registraros. Crearos un perfil y subid un documento R Markdown. Los prerequisitos son tener instalado R y RStudio (v0.96.230 o más), y el paquete knitr (v0.5 o más). Pasos que tenéis que seguir para publicar vuestro documento: 1) En RStudio, cread un documento R Markdown. 2) Generad el documento con Knit. 3) En la ventana de previsualización, clicad el botón de publicar. Como solución de vuestro ejercicio, copiad el enlace de vuestra página de prueba de RPubs.

En este caso, para resolver este ejercicio, usaré el R Markdown con los ejercicios como respuesta.

Ejercicios laboratorio 1 RTM

Caso práctico

Resolved los siguientes apartados: a) Cread un conjunto de datos inventado con R. Debe contener treinta observaciones (quince para hombres y quince para mujeres) para seis variables con estas características:

#Crearemos las carecterísticas de forma aleatoria. Se adjutna el enlace para generar strings (https://stackoverflow.com/questions/42734547/generating-random-strings) y la función sample para los números (obtenido de https://stackoverflow.com/questions/75963997/generate-random-numbers-in-r)

library("stringi")
Id = do.call(paste0, Map(stri_rand_strings, n=30, length=3, pattern = '[A-Z]'))
Edad = sample(18:65, 30, replace = T)
Gene = (do.call(paste0, Map(stri_rand_strings, n=30, length=1, pattern = '[1-2]')))
Trat = as.factor(do.call(paste0, Map(stri_rand_strings, n=30, length=1, pattern = '[A-C]')))
Peso = sample(45:110, 30, replace = T)
Alt = sample(145:190, 30, replace = T)

dataset_cs=data.frame(Id,Edad,Gene,Trat,Peso,Alt)

b) Buscad información de vuestro conjunto de datos y de vuestras variables.

summary(dataset_cs)
##       Id                 Edad           Gene           Trat        Peso       
##  Length:30          Min.   :18.00   Length:30          A:13   Min.   : 47.00  
##  Class :character   1st Qu.:31.75   Class :character   B: 5   1st Qu.: 62.00  
##  Mode  :character   Median :48.00   Mode  :character   C:12   Median : 75.50  
##                     Mean   :44.47                             Mean   : 79.13  
##                     3rd Qu.:54.75                             3rd Qu.:100.25  
##                     Max.   :65.00                             Max.   :108.00  
##       Alt       
##  Min.   :145.0  
##  1st Qu.:154.2  
##  Median :161.0  
##  Mean   :165.0  
##  3rd Qu.:176.8  
##  Max.   :189.0
head(dataset_cs)
##    Id Edad Gene Trat Peso Alt
## 1 JBE   52    1    C  105 166
## 2 SOZ   25    2    A   88 182
## 3 WBJ   19    2    B  102 156
## 4 QVR   40    2    C   78 150
## 5 HZV   25    2    B   56 155
## 6 BHD   53    2    B   70 154

c) Cread una nueva variable a partir de alguna de las que tengamos. Por ejemplo, podéis calcular el IMC (IMC = peso (kg)/ [estatura (m)]2 e incluid la nueva variable en el conjunto de datos.

dataset_cs$IMC = dataset_cs$Peso / ((dataset_cs$Alt)/100)^2
head(dataset_cs)
##    Id Edad Gene Trat Peso Alt      IMC
## 1 JBE   52    1    C  105 166 38.10422
## 2 SOZ   25    2    A   88 182 26.56684
## 3 WBJ   19    2    B  102 156 41.91321
## 4 QVR   40    2    C   78 150 34.66667
## 5 HZV   25    2    B   56 155 23.30905
## 6 BHD   53    2    B   70 154 29.51594

d) Cread dos data frames diferenciados para hombres y mujeres con dos nombres diferentes: Df_Hombres y Df_Mujeres.

Df_Hombres = subset.data.frame(dataset_cs, subset = Gene == "2")
head(Df_Hombres)
##     Id Edad Gene Trat Peso Alt      IMC
## 2  SOZ   25    2    A   88 182 26.56684
## 3  WBJ   19    2    B  102 156 41.91321
## 4  QVR   40    2    C   78 150 34.66667
## 5  HZV   25    2    B   56 155 23.30905
## 6  BHD   53    2    B   70 154 29.51594
## 10 ODH   65    2    B  103 153 44.00017
Df_Mujeres = subset.data.frame(dataset_cs, subset = Gene == "1")
head(Df_Mujeres)
##     Id Edad Gene Trat Peso Alt      IMC
## 1  JBE   52    1    C  105 166 38.10422
## 7  SVH   52    1    A   47 164 17.47472
## 8  OKY   63    1    C   70 180 21.60494
## 9  LYE   30    1    C  104 151 45.61203
## 11 FMY   41    1    B   98 175 32.00000
## 12 NIH   18    1    A   72 166 26.12861

e) Combinad de nuevo los dos ficheros anteriores y cread el primero de nuevo con el comando rbind().

dataset_cs = rbind.data.frame(Df_Hombres, Df_Mujeres)
summary(dataset_cs)
##       Id                 Edad           Gene           Trat        Peso       
##  Length:30          Min.   :18.00   Length:30          A:13   Min.   : 47.00  
##  Class :character   1st Qu.:31.75   Class :character   B: 5   1st Qu.: 62.00  
##  Mode  :character   Median :48.00   Mode  :character   C:12   Median : 75.50  
##                     Mean   :44.47                             Mean   : 79.13  
##                     3rd Qu.:54.75                             3rd Qu.:100.25  
##                     Max.   :65.00                             Max.   :108.00  
##       Alt             IMC       
##  Min.   :145.0   Min.   :17.47  
##  1st Qu.:154.2   1st Qu.:23.00  
##  Median :161.0   Median :27.78  
##  Mean   :165.0   Mean   :29.65  
##  3rd Qu.:176.8   3rd Qu.:34.32  
##  Max.   :189.0   Max.   :48.51