https://doi.org/10.5281/zenodo.14318846
02 - script to filter ladders.R
#
#
#currently set to only add tod and filter for date/min spm
#
#
rm(list=ls())
#packages
library(dplyr)
library(ggplot2)
library(sp)
library(maptools)
#file list
file_list <- list.files("data/find ladder/final SSF dataframes",full.names=T)
#track ratings
#basically just has track numbers and attributes
ratings <- read.csv("data/find ladder/attributes_of_all_tracks_with_entries_my_ratings.csv")
#filter track ratings to keep only good
#keep only tracks where max_nsd >40
#get list of Good track ids and fish
#need to do filtering in track_straightness as well to get Same Tracks
for(p in 1:length(file_list)){
data <- read.csv(file_list[[p]])
id <- data$fish_id[1]
data$t1_ <- as.POSIXct(data$t1_)
data$t2_ <- as.POSIXct(data$t2_)
#date constraint <3
if(data$species[1]=="Barbel"){
data <- filter(data,t2_<"2018-06-16"&t2_>"2018-05-01")
}
if(data$species[1]=="Grayling"){
data <- filter(data,t2_<"2018-04-16"&t2_>"2018-03-15")
}
if(length(data$fish_id)>1){
#add tod
dat2 <- matrix(c(10.227961934279923,47.817415435039486),nrow=1) %>% SpatialPoints(proj4string=CRS("+proj=longlat +datum=WGS84"))
data$tod_start_NEW <- 0
data$tod_end_NEW <- 0
for(i in 1:length(data$approach)){
tim1 <- as.POSIXct(data$t1_[i],tz="Europe/Berlin")
tim2 <-as.POSIXct(data$t2_[i],tz="Europe/Berlin")
dawn <- crepuscule(crds=dat2,dateTime=tim1,solarDep=12, direction=c("dawn"),POSIXct.out=T)
dusk <- crepuscule(crds=dat2,dateTime=tim1,solarDep=12, direction=c("dusk"),POSIXct.out=T)
sunrise <- sunriset(crds=dat2,dateTime=tim1,direction=c("sunrise"),POSIXct.out=T)
sunset <- sunriset(crds=dat2,dateTime=tim1,direction=c("sunset"),POSIXct.out=T)
#start
if(tim1>dawn$time&sunrise$time>tim1){
data$tod_start_NEW[i] <- "dawn"
}
if(tim1>sunset$time&dusk$time>tim1){
data$tod_start_NEW[i] <- "dusk"
}
else{
data$tod_start_NEW[i] <- data$tod_start_[i]
}
#end
if(tim2>dawn$time&sunrise$time>tim2){
data$tod_end_NEW[i] <- "dawn"
}
if(tim2>sunset$time&dusk$time>tim2){
data$tod_end_NEW[i] <- "dusk"
}
else{
data$tod_end_NEW[i] <- data$tod_end_[i]
}
}
#renumber tracks
approach_list <- data %>% group_by(fish_id) %>% summarise(approach=unique(approach))
approach_list$track <- ave(approach_list$approach,approach_list$fish_id,
FUN = seq_along)
data <- merge(data,approach_list,by=c('approach','fish_id'))
#min step per min and remove <15min
#get number steps and duration
dat_dur <- data %>% filter(case_==TRUE) %>% group_by(fish_id,track) %>% summarise(duration=(max(t2_)-min(t1_)),steps=n())
dat_dur$av_steps <- dat_dur$steps/as.numeric(dat_dur$duration)
#set limit in time to 15min and ave steps >2
data_dur <- dat_dur %>% filter(av_steps>2&duration>15)
data <- data %>% filter(track %in%unique(data_dur$track))
#renumber tracks again xx
approach_list <- data %>% group_by(fish_id) %>% summarise(approach=unique(approach))
approach_list$track2 <- ave(approach_list$approach,approach_list$fish_id,
FUN = seq_along)
data <- merge(data,approach_list,by=c('approach','fish_id'))
data$track <- data$track2
dat_filt_final <- data
write.csv(dat_filt_final,
paste0("data/find ladder/SSF data with tod filtered for migration and min spm over 2/",id,".csv"),
row.names = F)
} else{
print(paste0("fish id ",id," no data post date filtering"))
}
}