Tarea 5

Fecha de publicación

12 de noviembre de 2023

 

Instrucciones

  • La fecha de entrega es el 27 de octubre a las 11:59:59 pm
  • La tarea debe ser escrita en el formato para reportes dinámicos Rmarkdown o quarto (5 pts)
  • Debe entregar el archivo html generado del documento Rmarkdown/quarto por medio de mediación virtual (hay un enlace para someter la tarea). No envíe el archivo Rmd.
  • El reporte debe utilizar secciones de código (“chunks”) separados para cada ejercicio y subtítulos para cada uno así como comentarios en texto
  • El código de los bloques siempre debe ser visible (no use echo = FALSE)
  • El código dentro de los bloques de código debe estar documentado con comentarios (usando #)
  • Debe usar R básico para la manipulación de datos
  • Cada item tiene un valor de 5 puntos

 

Para esta tarea trabajaremos con los datos de camaras submarinas usados en clase. Estos datos muestran la salida de un programa de identificación automática de especies marinas en videos pasivos tomados en la columna de agua. Para cada video analizado el programa genera un archivo de texto (.TXT) con una fila para cada especie detectada mas una serie de metadatos asociados a la detección. Los datos se ven así:

 

Primero debemos preparar los archivos de ejemplo:

Código
# definir directorio a donde guardar los archivos
directorio <- "DIRECCION_DONDE_GUARDAR_LOS ARCHIVOS_DE_EJEMPLO"

# guardar archivos
download.file(
  url = paste0(
    "https://github.com/maRce10/ucr_r_avanzado/",
    "raw/master/additional_files/datos_camara_submarina.zip"
  ),
  destfile = file.path(directorio, "datos_camara_submarina.zip")
)

# extraerlos del zip
unzip(
  zipfile = file.path(directorio, "datos_camara_submarina.zip"),
  exdir = directorio
)

# hacer vector con nombre y direccion de archivos
archivos_txt <-
  list.files(
    path = directorio,
    full.names = TRUE,
    pattern = "TXT$"
  )

 

También pueden bajar el archivo directamente de este enlance. Recuerde extraer los archivos y hacer el vector con los nombres de los archivos (correr líneas de la 9 a la 13).

Si todo salió bien el vector “archivos_txt” debería tener 19 elementos:

Código
length(archivos_txt)
[1] 19

 

  1. Haga un bucle for que una todos los datos contenidos en los archivos de texto en un solo cuadro de datos (‘data frame’, debe llamarse ‘datos_camaras’) y añada una columna con el nombre del archivo de donde provienen los datos (debe llamarse ‘archivo’; pistas: 1) añadir el nombre del archivo en una columna se hace en el cuerpo del bucle luego de leer el archivo; 2) recuerden usar basename()).
  1. Haga un bucle sapply que devuelva el número de familias para cada archivo. El bucle debe usar los datos en el data frame ‘datos_camaras’ creado en el ejercicio 1 (no debe leer de nuevo los archivos de texto). El resultado debe ser guardado en un cuadro de datos (‘data frame’) que contenga las columnas ‘archivo’ y ‘n_familias’. (pistas: 1) necesitan crear una función en la llamada del bucle; 2) el bucle debe ciclar sobre cada uno de los nombres de archivo; 3) deben crear un subconjunto de los datos para cada archivo a lo interno del bucle). Las primeras 3 filas del cuadro de datos deben verse así:
archivo n_familias
2022-09-02_R3-LcamT3-RcamN4_Pel1_2021-09-24_MaxN.TXT 19
2022-09-03_S6-LB13-RB12_PuntaMariaOeste_2022-03-24_MaxN.TXT 1
2022-09-03_T4-LB19-RB18_PuntaMariaOeste_2022-03-24_MaxN.TXT 2
  1. Haga un bucle sapply que devuelva el número de géneros (columna ‘genus’) para cada archivo. El bucle debe usar los datos en el data frame ‘datos_camaras’ creado en el ejercicio 1 (no debe leer de nuevo los archivos de texto). El resultado debe ser añadido como una nueva columna al cuadro de datos creado en el ejercicio 2. Las primeras 3 filas del cuadro de datos deben verse así:
archivo n_familias n_generos
2022-09-02_R3-LcamT3-RcamN4_Pel1_2021-09-24_MaxN.TXT 19 32
2022-09-03_S6-LB13-RB12_PuntaMariaOeste_2022-03-24_MaxN.TXT 1 1
2022-09-03_T4-LB19-RB18_PuntaMariaOeste_2022-03-24_MaxN.TXT 2 2
  1. Haga un bucle sapply que devuelva la fecha de creación del video para cada archivo. El bucle debe usar los datos en el data frame ‘datos_camaras’ creado en el ejercicio 1 (no debe leer de nuevo los archivos de texto). El resultado debe ser añadido como una nueva columna al cuadro de datos creado en el ejercicio 2. Las primeras 3 filas del cuadro de datos deben verse así:
archivo n_familias n_generos date
2022-09-02_R3-LcamT3-RcamN4_Pel1_2021-09-24_MaxN.TXT 19 32 2021-09-25
2022-09-03_S6-LB13-RB12_PuntaMariaOeste_2022-03-24_MaxN.TXT 1 1 2022-03-24
2022-09-03_T4-LB19-RB18_PuntaMariaOeste_2022-03-24_MaxN.TXT 2 2 2022-03-24
  1. Haga un bucle sapply que calcule el número de veces que se observó cada especie. El bucle debe trabajar sobre el data frame ‘datos_camaras’ creado en el ejercicio 1 (no debe leer de nuevo los archivos de texto) y el cálculo debe ser la suma de la columna ‘MaxN’. Ponga los resultados en un cuadro de datos con columnas para especie y número de observaciones. (pista: unique(datos_camaras$Species)). Remueva el campo en el que especie es igual a ““. Las primeras 3 filas del cuadro de datos deben verse así:
spp n_obs
xanthopterus xanthopterus 145
laticlavius laticlavius 25
polylepis polylepis 26
  1. Utilice bucles sapply para añadir el mínimo y máximo de la profundidad para cada una de las especies en el cuadro de datos creado en el ejercicio anterior (pistas: 1) asegúrese que la columna de profundidad es numérica antes de calcular las profundidades; 2) gsub(" m", "", vector); 3) gsub(",", ".", vector); 4) as.numeric()). Las primeras 3 filas del cuadro de datos deben verse así:
spp n_obs min_prof max_prof
xanthopterus xanthopterus 145 6.4 31.6
laticlavius laticlavius 25 9.6 31.6
polylepis polylepis 26 9.6 30.0
  1. Calcule el rango de profundidad (i.e. la diferencia entre el mínimo y el máximo de la profundidad) para cada especie y añádalo como una columna al cuadro de datos creado en el ejercicio 5. Las primeras 3 filas del cuadro de datos deben verse así:
spp n_obs min_prof max_prof rango_prof
xanthopterus xanthopterus 145 6.4 31.6 25.2
laticlavius laticlavius 25 9.6 31.6 22.0
polylepis polylepis 26 9.6 30.0 20.4
  1. Incluya el cuadro de datos generado en los ejercicios 5 a 7 como una tabla en su reporte usando la función DT del paquete datatable.

  2. Publique el reporte en Rpubs y añada el enlace en el reporte (use un enlace en el texto).

 

Información de la sesión

R version 4.1.2 (2021-11-01)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 22.04.2 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.10.0
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0

locale:
 [1] LC_CTYPE=es_CR.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=es_CR.UTF-8        LC_COLLATE=es_CR.UTF-8    
 [5] LC_MONETARY=es_CR.UTF-8    LC_MESSAGES=es_CR.UTF-8   
 [7] LC_PAPER=es_CR.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=es_CR.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] knitr_1.45

loaded via a namespace (and not attached):
 [1] htmlwidgets_1.5.4 compiler_4.1.2    fastmap_1.1.1     cli_3.6.1        
 [5] tools_4.1.2       htmltools_0.5.7   rstudioapi_0.13   yaml_2.3.7       
 [9] rmarkdown_2.25    jsonlite_1.8.7    xfun_0.41         digest_0.6.33    
[13] rlang_1.1.2       evaluate_0.23