Solución a la tarea 5

Fecha de publicación

5 de noviembre de 2024

  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

 

Información de la sesión

R version 4.4.1 (2024-06-14)
Platform: x86_64-pc-linux-gnu
Running under: Ubuntu 22.04.4 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=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=es_CR.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=es_CR.UTF-8    LC_MESSAGES=en_US.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       

time zone: America/Costa_Rica
tzcode source: system (glibc)

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

loaded via a namespace (and not attached):
 [1] htmlwidgets_1.6.4 compiler_4.4.1    fastmap_1.2.0     cli_3.6.3        
 [5] tools_4.4.1       htmltools_0.5.8.1 rstudioapi_0.16.0 yaml_2.3.10      
 [9] rmarkdown_2.28    knitr_1.48        jsonlite_1.8.9    xfun_0.48        
[13] digest_0.6.37     rlang_1.1.4       evaluate_1.0.1