#' Time match of tracking signals
#'
#' @description Matches signals of different stations at the same time for bearing calculation
#'
#' @param data data.frame. radiotracking data
#' @param station_time_error numeric. tolerance time between incoming signals in seconds
#' @param progess logical. print progress
#'
#'
#' @return data.frame of radiotracking data with matching tags
#'
#' @author RadioTracking EU
#'
#' @export
#'
time_match_signals <- function(data,station_time_error=0.3, progress=F){
matched_data<-NULL
cnt_stats=0
#for each station
for(i in unique(data$Name)){
if (progress) {
setProgress(value=cnt_stats)
incProgress(amount=0, detail = paste0("Station: ",i))
}
tmp_s<-subset(data,Name==i)
num_tags=length(unique(tmp_s$freq_tag))
#for each frequency tag
for(l in unique(tmp_s$freq_tag)){
tmp_sf<-subset(tmp_s,freq_tag==l)
tmp_sf<-tmp_sf[order(tmp_sf$timestamp),]
#calculate timedifference between the loggings
tmp_sf$td<-c(0,diff(tmp_sf$timestamp))
tmp_s$ti <- as.POSIXct(NA, origin = "1970-01-01")
gc<-0
tmp_sf$ti[1]<-tmp_sf$timestamp[1]
for(i in 2:nrow(tmp_sf)){
if(sum(tmp_sf$td[(i-gc):i])<=station_time_error){
tmp_sf$ti[i]<- tmp_sf$timestamp[i-gc-1]
if(any(duplicated(tmp_sf$receiver[(i-gc-1):i]))){
tmp_sf$ti[i]<- tmp_sf$timestamp[i]
gc<--1
}
gc<-gc+1
}else{
tmp_sf$ti[i]<- tmp_sf$timestamp[i]
gc<-0
}
}
matched_data<-rbind(matched_data,tmp_sf)
}
cnt_stats<-cnt_stats+1
}
matched_data$timestamp<-as.POSIXct(matched_data$ti, origin = "1970-01-01")
return(matched_data)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.