Solución a la tarea 5

Fecha de publicación

12 de noviembre de 2023

  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()).

Respuesta:

Código
# crear un cuadro de datos vacios donde poner los resultados
datos_camaras <- data.frame()

# ciclar sobre los archivos para leer los datos
for(i in archivos_txt){
  
  # leer datos
  txt <- read.table(i, header = TRUE, skip = 4, sep = "\t")
  
  # añadir nombre de archivo
  txt$archivo <- basename(i)
  
  # adjuntar datos
  datos_camaras <- rbind(datos_camaras, txt) 
}
  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

Respuesta:

Código
# ciclar sobre los nombres de archivos en datos_camaras$archivo
n_familias <- sapply(unique(datos_camaras$archivo), function(x){
  
  # leer datos de un archivo
  Y <- datos_camaras[datos_camaras$archivo == x, ]
  
  # estimar numero de familias
  n_fams <- length(unique(Y$Family))

  return(n_fams)
  })

# guardar resultados en un cuadro de datos
cam_dat <- data.frame(archivo = basename(unique(datos_camaras$archivo)), n_familias = n_familias, row.names = 1:length(n_familias))
  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

Respuesta:

Código
# ciclar sobre los nombres de archivos en datos_camaras$archivo
cam_dat$n_generos <- sapply(unique(datos_camaras$archivo), function(x){
  
   # leer datos de un archivo
  Y <- datos_camaras[datos_camaras$archivo == x, ]
  
  # estimar numero de generos
  n_gens <- length(unique(Y$Genus))

  return(n_gens)
  })
  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

Respuesta:

Código
# ciclar sobre los nombres de archivos en datos_camaras$archivo
cam_dat$date <- sapply(unique(datos_camaras$archivo), function(x){
   
  # leer datos de un archivo
  Y <- datos_camaras[datos_camaras$archivo == x, ]
  
  # extraer fecha
  date <- length(unique(Y$Date))

  return(date)
  })
  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

Respuesta:

Código
# ciclar sobre los nombres de archivos en datos_camaras$archivo
n_obs <- sapply(unique(datos_camaras$Species), function(x){
  
  # leer datos de un archivo  
  X <- datos_camaras[datos_camaras$Species == x, ]
  
  # sumar numero de observaciones
  obs <- sum(X$MaxN)
  
  return(obs)
})


sp_dat <- data.frame(spp = unique(datos_camaras$Species), n_obs)

sp_dat <- sp_dat[sp_dat$spp != "", ]
  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

Respuesta:

Código
# convertir profundidad a una columna numerica
datos_camaras$Depth <- gsub(" m", "", datos_camaras$Depth)
datos_camaras$Depth <- gsub(",", ".", datos_camaras$Depth)
datos_camaras$Depth <- as.numeric(datos_camaras$Depth)

# ciclar sobre los nombres de especies
sp_dat$min_prof <- sapply(sp_dat$spp, function(x){
  
  # leer los datos para una especie
  X <- datos_camaras[datos_camaras$Species == x, ]
  
  #  calcular el minimo de la profundidad
  min_prf <- min(X$Depth, na.rm = TRUE)
  
  return(min_prf)
})

# ciclar sobre los nombres de especies
sp_dat$max_prof <- sapply(sp_dat$spp, function(x){
  
  # leer los datos para una especie
  X <- datos_camaras[datos_camaras$Species == x, ]
  
  # calcular el maximo de profundidad
  max_prf <- max(X$Depth, na.rm = TRUE)
  
  return(max_prf)
})
  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

Respuesta:

Código
# calcular el maximo menos el minimo de profundidad
sp_dat$rango_prof <- sp_dat$max_prof - sp_dat$min_prof
  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.

Respuesta:

Código
library(DT)
datatable(sp_dat)
  1. 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] DT_0.17

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