Tarea 5
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
<- "DIRECCION_DONDE_GUARDAR_LOS ARCHIVOS_DE_EJEMPLO"
directorio
# 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
- 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 usarbasename()
).
- 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 |
- 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 |
- 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 |
- 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 |
- 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 |
- 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 |
Incluya el cuadro de datos generado en los ejercicios 5 a 7 como una tabla en su reporte usando la función
DT
del paquetedatatable
.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