sula

Functions to clean your data and calculate the foraging trip parameters of the individuals. | Un paquete para editar datos de GPS y calcular parámetros de los viajes de alimentación.

Miriam Lerma
2021-05-15

Intro

Este paquete contiene:

English

Instalación 🤖

Puedes instalar este paquete desde GitHub usando:

# install.packages("devtools")
devtools::install_github("MiriamLL/sula")

Datos

Carga la librería

library(sula)

Un individuo 💃🏽

Carga los datos de GPS de un individuo.

head(GPS_01)

Nota Incluye columna con fecha y hora en formato POSIXct

Multiples individuos 👯‍

Carga los datos de GPS de diez individuos.

head(GPS_raw)

Nota Son datos en crudo por lo que las horas no están corregidas.

Notas de campo ✏️

Incluye el periodo cuando se colocó el dispositivo hasta cuando se retiró.

Notas<-Notas

Nota: no corresponden al periodo real de muestreo. Se proveen estos datos para practicar las funciones.

Funciones

ajustar_hora 🕐

Esta función corrige el tiempo de acuerdo a la zona horaria, se necesita especificar los datos GPS, el nombre de la columna que contiene datos de hora y día, el formato en el que están éstos datos, y el número de horas de diferencia a corregir de acuerdo al GMT.

GPS_gmt<-ajustar_hora(GPS_data = GPS_raw,
                      dia_col = 'DateGMT',
                      hora_col = 'TimeGMT',
                      formato="%d/%m/%Y %H:%M:%S",
                      dif_hor = 5)

Regresa el mismo data frame con dos columnas adicionales: dia_hora con el día y fecha original y hora_corregida con la hora correspondiente al GMT.

recortar_periodo ✂️

Este función permite recortar periodos dentro de los datos.

GPS_recortado<-recortar_periodo(GPS_data=GPS_01,
                                inicio='02/11/2017 18:10:00',
                                final='05/11/2017 14:10:00',
                                dia_col='DateGMT',
                                hora_col='TimeGMT',
                                formato="%d/%m/%Y %H:%M:%S")

Nota: El formato de tiempo y hora debe ser el mismo formato que el formato de inicio y final.

localizar_nido 🐣

Esta función usa el primer valor de los datos de GPS como punto de la colonia, sirve para identificar la localización del nido por individuo. Regresa un nuevo data frame con dos columnas: Latitude y Longitude correspondientes a la localización del nido.

nest_loc<-localizar_nido(GPS_data = GPS_01,
                          lat_col="Latitude",
                          lon_col="Longitude")

Nota Asume que los datos del nido corresponde al primer registro de GPS.

identificar_viajes️🛩️

Esta función agrega una columna de acuerdo a distancia de la colonia para determinar si esta en un viaje de alimentación o no.

GPS_trip<-identificar_viajes(GPS_data=GPS_01,
                        nest_loc=nest_loc,
                        distancia_km=1)

En la columna llamada trip:
N=dentro de la distancia considerada como no viaje de alimentación, y
Y=viaje de alimentación.

contar_viajes 🧮

Esta función agrega una columna con el número del viaje y elimina locaciones dentro de el radio de la colonia.

GPS_edited<-contar_viajes(GPS_data=GPS_trip)

dist_colonia 📏

Agrega una columna con la distancia de la colonia de cada punto. Regresa el mismo data frame con una nueva columna llamada ’maxdist_km.

GPS_dist<-dist_colonia(GPS_edited = GPS_edited, 
                       nest_loc=nest_loc)

Nota usa CRS: 4326. Enlaces: ¿referencia geográfica?, ¿cual usar?

dist_puntos 📐

Agrega una columna con la distancia entre cada punto. Regresa el mismo data frame con una nueva columna llamada ‘pointsdist_km’.

GPS_dist<-dist_puntos(GPS_data = GPS_edited,
                      separador='trip_number')

Nota usa CRS: 4326. Incluye NAs al inicio del viaje. Enlaces: ¿referencia geográfica?, ¿cual usar?

calcular_duracion ⏳

Identifica el inicio y el final del viaje y calcula la duración. Regresa un nuevo data frame con 4 columnas: trip_id, trip_start, trip_end y duration.

duracion<-calcular_duracion(GPS_data = GPS_edited,
                            col_diahora = "tStamp",
                            formato = "%Y-%m-%d %H:%M:%S",
                            unidades="hours",
                            separador="trip_number")

Nota la duración se calcula en valores númericos.

calcular_totaldist 📐

Calcula distancia recorrida de la colonia por viaje.
Debe contener la columna Longitude y Latitude con estos nombres.
Regresa un nuevo data frame con la distancia total recorrida por viaje.

totaldist_km<-calcular_totaldist(GPS_data= GPS_edited,
                                 separador="trip_number")

calcular_maxdist 📏

Obtiene la distancia máxima de la colonia por viaje.
Debe contener la columna Longitude y Latitude con estos nombres.
Regresa un nuevo data frame con la distancia máxima de la colonia por viaje.

maxdist_km<-calcular_maxdist(GPS_data = GPS_edited, 
                             nest_loc=nest_loc,
                             separador="trip_number")

calcular_tripparams 📐⏳📏

Calcula la duración de los viajes, la distancia máxima de la colonia y la distancia total recorrida. Regresa un nuevo data frame con los parámetros por viaje.

trip_params<-calcular_tripparams(GPS_data = GPS_edited,
                              diahora_col = "tStamp",
                              formato = "%Y-%m-%d %H:%M:%S",
                              nest_loc=nest_loc,
                              separador="trip_number")

recortar_por_ID ✂️✂️✂️

Puedes recortar periodos en los viajes.
Para el ejemplo hay que tener dos data frames:
Uno con los datos de GPS incluyendo las columnas DateGMT,TimeGMT y IDs.
Si no tienen estos nombres favor de renombrarlas.
El otro data frame son los datos de campo y deben incluir las columnas ‘IDs’, ‘Hora_inicio’ y ‘Hora_final’.
Si no tienen esos nombres favor de renombrarlas.

GPS_recortados<-recortar_por_ID(GPS_data=GPS_raw,
                                Notas=Notas,
                                formato="%d/%m/%Y %H:%M:%S")

localizar_nidos 🐣🐣🐣

Esta función asume que los datos del nido corresponde al primer registro de GPS y regresa las coordenadas de los nidos para cada individuo.

Nidos_df<-localizar_nidos(GPS_data=GPS_raw,
                         lon_col="Longitude",
                         lat_col="Latitude",
                         ID_col="IDs")

preparar_varios 🔌🔌🔌

Esta función sirve para preparar los datos antes de calcular parámetros por individuo.
En la función debes especificar: el nombre de tu data frame, el nombre de la columna de los ID (identificadores por individuo), el nombre de la columna de la longitud y el nombre de la columna de la latitud. Para elegir los viajes elige un buffer de fuera de la colonia (distancia_km). Elige también tu sistema de referencia geográfica.

GPS_preparado<-preparar_varios(GPS_data=GPS_raw,
                               ID_col="IDs",
                               lon_col="Longitude",
                               lat_col="Latitude",
                               distancia_km=1,
                               sistema_ref="+init=epsg:4326")

Nota que al usar esta función aparecerán warnings. Estos warnings advierten sobre la transformación del objeto espacial.

Enlaces: ¿referencia geográfica?, ¿cual usar?

tripparams_varios 📐📐📐

Para calcular parámetros de viajes de varios individuos especifica el nombre de la columna que contiene los identificadores por individuo, el nombre de la columna que contiene información número del viaje y el nombre de la columna que contiene información del día y hora en formato POSTIXct.

Nota para usar esta función tus datos deben tener una columna día y hora, si no es así, puedes hacerlo de manera manual o usar la función ajustar_hora de este paquete y poner 0 en la diferencia horaria.

GPS_preparado<-ajustar_hora(GPS_data = GPS_preparado,
                            dif_hor = 0,
                            dia_col = 'DateGMT',
                            hora_col = 'TimeGMT',
                            formato="%d/%m/%Y %H:%M:%S")
trip_params<-tripparams_varios(GPS_data=GPS_preparado,
                               col_ID = "IDs",
                               col_diahora="hora_corregida",
                               separador="trip_number")

Otras herramientas

Interpolar tus viajes 🛠️

Si tienes intervalos disparejos, y necesitas interpolar tus datos puedes establecer un intervalo Tu data frame debe contener las columnas Longitud, Latitud, ID, numero de viaje, y hora y dia en formato POSTIXct

GPS_interpolated<-interpolar_viajes(GPS_preparado=GPS_preparado, 
                                    intervalo="900 sec", 
                                    col_diahora="dia_hora", 
                                    separador='trip_number',
                                    col_ID='IDs')

Citar

DOI