############################################
### Masterfile Wildschwein GPS-Locations ###
############################################
# Forschungsgruppe Wildtiermanagement, ZHAW Wädenswil
#
# Projekt Wildschweinschreck; Besenderungsjahre 2014 - 2017
#
# Kontakt: Stefan Suter suts@zhaw.ch / Benjamin Sigrist sigb@zhaw.ch
#
#
# Stand 15.01.2018, sigb
#
#
# Die Wildschweinpositionen wurden in verschiedenen Schritten bereinigt und mit zusätzlichen Attributen anotiert.
#
# Diese umfassten kurz:
#
#
# 1. Einzelne Tiere zusammenfassen, extreme Outlier entfernen (400000 < X > 850000), DatumZeit-Spalte anhängen
#
# => Spalten Tier - ZeitpUTC
#
#
# 2. Anhängen von Infos über die relevanten Tageszeiten, basierend auf dem Mittelpunkt (Lat / Long / Zeitzone UTC) aus Gesamtdatensatz
#
# => sunrise: Zeitpunkt Sonnenaufgang
#
# sunset: Zeitpunkt Sonnenuntergang
#
# CivilTwilight_start: Zeitpunkt zivile Morgendämmerung (Sonne 6° unter dem Horizont)
#
# CiviTwilight_end: Zeitpunkt zivile Abenddämmerung (Sonne 6° unter dem Horizont)
#
# moonilumination: Anteil Mondlicht (0 - 1)
#
# nightlength: Dauer der Nacht in sec
#
# jd: Julianischer Tag ab dem 1 Januar 4713 vor Christus (BCE, Before Common Era), R Funktion jd
#
# moonrise: Zeitpunkt Mondaufgang
#
# moonset: Zeitpunkt Monduntergang
#
# 3. Einteilung der Positionen in bestimmte Tages/Nachtzeiten
#
# => day: Tag / Nacht
#
# phase: Tag / Abenddämmerung / Nacht / Morgendämmerung
#
# quarter: Einteilung der Nacht in 4 Viertel
#
#
# 4. Semantische Anreicherung mit Attributen des Habitats
#
# => MaxVal: Einteilung in Habitate: 0 = kein Habitat, 1 = Landw., 2 = Wald, 3 = Schilf
#
# Location: Studiengebiet: 1 = Elfingen, 2 = Felsenau, 3 = Fanel (if x$location is.na remove)
#
# Walddist: Distanz zum Waldrand: Einteilung in 5 Meter-Klassen
#
# Jagd: Jagdverbotsperimeter: 1 = Jagd / 0 = keine Jagd
#
#
# 5. Anreicherungen mit Bewegungsparametern
#
# => Trajectory: Einzigartige Kennung aus Tier und Collar ID
#
# distance: Distanz zwischen zwei Positionen in Meter
#
# speed: Geschwindigkeit zwischen zwei Positionen in m/sec
#
# timelag: Zeit zwischen zwei Postionen in sec
library(sf)
library(tidyverse)
library(readxl)
library(stringr)
sensitive_data <- "sensitive_data"
wildboarzip <- file.path(sensitive_data, "wildboar.zip")
if(file.exists(wildboarzip)){
unzip(wildboarzip, exdir = sensitive_data)
} else{
print(paste("Go to",
"https://github.com/ComputationalMovementAnalysis/RawDatasets/raw/main/wildboar.zip",
"and download the zipfile to this directory:",
sensitive_data))
}
## Import and Clean Wildboar Meta Data #################################
wildschwein_metadata_raw <- read_xlsx(file.path(sensitive_data, "Wildschweine_2018-04-17_METADATEN.xlsx"), 1) %>%
filter(!is.na(Animal))
wildschwein_metadata <- wildschwein_metadata_raw %>%
janitor::clean_names() %>%
mutate(
animal = case_when(
animal == "W118"~"WS118",
animal == "WS098/003"~"WS098",
animal == "WS109/004"~"WS084", # [1]
animal == "WS117/79"~"WS117",
TRUE ~ animal
),
TierID = as.integer(str_extract(animal,"\\d{3}")),
CollarID = as.integer(halsband_nummer_klein),
Sex = as_factor(sex),
TierName = str_extract(name, "[a-zA-Z]+"),
Gewicht = gewicht,
Rotte = rotte,
Alter_monate = alter_monate
) %>%
select(TierID, TierName, CollarID, Sex, Gewicht, Rotte, Alter_monate)
# [1]: This is actually Gaby, I don't know why she got a new ID. Renaming her
# is a bit dangerous, since we need to take care to rename the ID in
# wildschwein.csv as well
## Import and Clean Wildboar Location Data #################################
wildschwein_raw <- read_delim(file.path(sensitive_data, "wildschwein.csv"), ";") %>%
filter(!is.na(Lat)) %>%
transmute(Tier, DatetimeUTC = ZeitpUTC, Lat, Long, day, moonilumination)
wildschwein_raw_sf <- st_as_sf(wildschwein_raw, coords = c("Long", "Lat"), crs = 4326)
wildschwein_raw_sf <- wildschwein_raw_sf %>%
st_transform(2056)
wildschwein <- cbind(st_drop_geometry(wildschwein_raw_sf),st_coordinates(wildschwein_raw_sf)) %>%
as_tibble() %>%
rename(E = X, N = Y)
# Removes an single (?) outlier
wildschwein <- wildschwein %>%
filter(E < 2800000, N < 1300000)
# Manually correct some Names
wildschwein <- wildschwein %>%
mutate(Tier = case_when(
Tier == "083_Evel_12842_"~"083_Evel_12842",
Tier == "058_Chri_1227"~"058_Chri_12274",
Tier == "109_Gab2_12274"~"084_Gab2_12274", # see comment [1]
TRUE~Tier)
) %>%
separate(Tier, c("TierID","TierName","CollarID"),convert = TRUE)
# Filtering removing locations after a certain date for the following animal, since it seems the collar
# was not switched off in the field.
wildschwein <- wildschwein %>%
filter(!(TierID == 25 & CollarID == 12272 & DatetimeUTC > as.POSIXct("2015-02-26 00:00:00", tz = "UTC"))) %>%
filter(!(TierID == 83 & CollarID == 12842 & DatetimeUTC > as.POSIXct("2016-03-06 00:00:00", tz = "UTC"))) %>%
filter(!(TierID == 83 & CollarID == 12842 & DatetimeUTC < as.POSIXct("2015-12-08 22:30:00", tz = "UTC")))
# Get centeroids of wildboars to seperate into study areas
wildschwein_centeroid <- wildschwein %>%
st_as_sf(coords = c("E","N"),crs = 2056) %>%
group_by(TierID, CollarID) %>%
summarise() %>%
st_centroid()
wildschwein_centeroid <- cbind(st_drop_geometry(ungroup(wildschwein_centeroid)), st_coordinates(wildschwein_centeroid))
wildschwein_metadata <- wildschwein_centeroid %>%
mutate(
Study_area = case_when(
Y < 1208000~"Bern",
Y > 1224000~"Aargau",
TRUE~"Bern & Aargau"
)
) %>%
select(TierID, CollarID, Study_area) %>%
full_join(wildschwein_metadata, by = c("TierID", "CollarID"))
wildschwein <- wildschwein %>%
# i left TierName until now to make it easy to check if assumptions are correct
rename(TierNameCheck = TierName) %>%
left_join(wildschwein_metadata, by = c("TierID", "CollarID")) %>%
transmute(TierID, TierName, CollarID = as.integer(CollarID), DatetimeUTC, E, N, Study_area, day, moonilumination)
wildschwein_BE <- wildschwein %>%
filter(Study_area == "Bern") %>%
select(-Study_area)
wildschwein_metadata <- wildschwein_metadata %>%
select(TierID, TierName, CollarID, Sex, Gewicht, Study_area)
wildschwein_metadata <- mutate(wildschwein_metadata, CollarID = as.integer(CollarID))
# There are some locations with identical timestamps, remove the first
wildschwein_BE <- wildschwein_BE %>%
group_by(TierID, TierName, CollarID) %>%
mutate(
timelag0 = as.numeric(difftime(lead(DatetimeUTC),DatetimeUTC, units = "secs")) == 0
) %>%
filter(!timelag0) %>%
select(-timelag0) %>%
ungroup()
usethis::use_data(wildschwein_BE, overwrite = TRUE)
usethis::use_data(wildschwein_metadata, overwrite = TRUE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.