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 resultadosdatos_camaras <-data.frame()# ciclar sobre los archivos para leer los datosfor(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) }
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í:
# ciclar sobre los nombres de archivos en datos_camaras$archivon_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 datoscam_dat <-data.frame(archivo =basename(unique(datos_camaras$archivo)), n_familias = n_familias, row.names =1:length(n_familias))
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í:
# ciclar sobre los nombres de archivos en datos_camaras$archivocam_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) })
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í:
# ciclar sobre los nombres de archivos en datos_camaras$archivocam_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) })
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$archivon_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 !="", ]
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 numericadatos_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 especiessp_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 especiessp_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)})
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 profundidadsp_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