diff cb_dissimilarity.r @ 0:7e6cc3da1189 draft

planemo upload for repository https://github.com/Marie59/champ_blocs commit 8b6fcddd239979c11977472de6cbb349690758c8
author ecology
date Fri, 02 Dec 2022 16:13:18 +0000
parents
children 8dc082da41c1
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cb_dissimilarity.r	Fri Dec 02 16:13:18 2022 +0000
@@ -0,0 +1,1753 @@
+# author: "Jonathan Richir"
+# date: "01 October 2022"
+
+
+#Rscript
+
+###############################
+##  ##
+###############################
+
+#####Packages : dplyr
+#               tidyr
+#               readr
+#               writexl
+#               stringr
+#               readxl
+#               tibble
+#               lubridate
+#               cowplot
+#               magrittr
+#               rmarkdown
+library(magrittr)
+#####Load arguments
+
+args <- commandArgs(trailingOnly = TRUE)
+
+#####Import data
+
+if (length(args) < 1) {
+    stop("This tool needs at least 1 argument")
+}else {
+    fiche_val <- args[1]
+    input_data <- args[2]
+    choice <- args[3]
+    choice_date <- as.numeric(args[4])
+}
+
+#############################################################
+#                                                           #
+#               Loading and cleaning data                   #
+#                                                           #
+#############################################################
+# load qecb data
+
+qecb <- read.csv2(input_data, header = TRUE, fileEncoding = "Latin1") # fileEncoding = "Latin1",  cfr é in variable names
+
+# import csv files ficheterrain
+
+fiche <- read.csv2(fiche_val, header = TRUE, fileEncoding = "Latin1") # fileEncoding = "Latin1",  cfr é in variable names
+
+## work on "Fiche terrain"
+
+date_fiche <- as.Date(stringr::str_sub(fiche$date.sortie, end = 10), origin = "1970-01-01")
+fiche <- tibble::add_column(fiche, date_fiche, .after = "date.sortie")
+rm(date_fiche)
+
+## qecb vs fiche terrain
+
+fiche_red <- dplyr::filter(fiche, fiche$ID.Fiche %in% unique(qecb[, c("id")]))
+
+id_count <- qecb %>% dplyr::group_by(id) %>% dplyr::count()
+id_count <- dplyr::rename(id_count, "ID.Fiche" = "id")
+id_count <- data.frame(id_count)
+fiche_red <- dplyr::left_join(fiche_red, id_count)
+
+# rep fiche terrain information
+fiche_expanded <- fiche_red[rep(row.names(fiche_red), fiche_red$n), 1:ncol(fiche_red)]
+fiche_expanded <- dplyr::rename(fiche_expanded, "id" = "ID.Fiche")
+
+## merge qecb data and ficheterrain information
+
+qecb <- dplyr::bind_cols(qecb, fiche_expanded)
+qecb <- dplyr::rename(qecb, "id_qecb" = "id...1")
+qecb <- dplyr::rename(qecb, "id_fiche" = "id...68")
+
+rm(fiche_expanded, fiche_red, id_count)
+
+qecb <- qecb %>% tidyr::separate(date_fiche, c("Year", "Month", "Day"), sep = "-", remove = FALSE)
+
+
+## quadrat nb : in contrast to ivr df, quadrat number is missing for many observations in qecb df ; but from the Numero.Photo variable (boulder photo associated to field data collection), I could get back most missing quadrat numbers
+
+quadrat <- stringr::str_extract(qecb$Numero.Photo, "Q[12345]")
+qecb <- tibble::add_column(qecb, quadrat, .after = "Numero.Photo")
+rm(quadrat)
+
+# check
+quadrat_bis <- rep(NA, length = nrow(qecb))
+qecb <- tibble::add_column(qecb, quadrat_bis, .after = "quadrat")
+rm(quadrat_bis)
+
+qecb$quadrat_bis <- ifelse(qecb$Numéro.Bloc.échantillon %in% c(1, 2) & qecb$Type.Bloc == "Bloc mobile", "Q1", qecb$quadrat_bis)
+qecb$quadrat_bis <- ifelse(qecb$Numéro.Bloc.échantillon %in% c(3, 4) & qecb$Type.Bloc == "Bloc mobile", "Q2", qecb$quadrat_bis)
+qecb$quadrat_bis <- ifelse(qecb$Numéro.Bloc.échantillon %in% c(5, 6) & qecb$Type.Bloc == "Bloc mobile", "Q3", qecb$quadrat_bis)
+qecb$quadrat_bis <- ifelse(qecb$Numéro.Bloc.échantillon %in% c(7, 8) & qecb$Type.Bloc == "Bloc mobile", "Q4", qecb$quadrat_bis)
+qecb$quadrat_bis <- ifelse(qecb$Numéro.Bloc.échantillon %in% c(9, 10) & qecb$Type.Bloc == "Bloc mobile", "Q5", qecb$quadrat_bis)
+
+
+qecb$quadrat_bis <- ifelse(qecb$Numéro.Bloc.échantillon == 1 & qecb$Type.Bloc %in% c("Bloc fixé", "Roche en place"), "Q1", qecb$quadrat_bis)
+qecb$quadrat_bis <- ifelse(qecb$Numéro.Bloc.échantillon == 2 & qecb$Type.Bloc %in% c("Bloc fixé", "Roche en place"), "Q2", qecb$quadrat_bis)
+qecb$quadrat_bis <- ifelse(qecb$Numéro.Bloc.échantillon == 3 & qecb$Type.Bloc %in% c("Bloc fixé", "Roche en place"), "Q3", qecb$quadrat_bis)
+qecb$quadrat_bis <- ifelse(qecb$Numéro.Bloc.échantillon == 4 & qecb$Type.Bloc %in% c("Bloc fixé", "Roche en place"), "Q4", qecb$quadrat_bis)
+qecb$quadrat_bis <- ifelse(qecb$Numéro.Bloc.échantillon == 5 & qecb$Type.Bloc %in% c("Bloc fixé", "Roche en place"), "Q5", qecb$quadrat_bis)
+
+## I create two new variables for Site names, one for data analysis and one for data reporting. Only works for actual ivr df with 22 sites !
+
+# Name for data analysis
+
+qecb <- tibble::add_column(qecb, Site = qecb$zone.habitat, .after = "ID.Fiche")
+
+for (x in seq_along(qecb$Site)) {
+  if (grepl(pattern = "Locmariaquer", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "GDMO_Locmariaquer"
+ } else if (grepl(pattern = "Beg Lann", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "GDMO_BegLann"
+ } else if (grepl(pattern = "Plateau du Four", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "FOUR_PlateauFour"
+ } else if (grepl(pattern = "Grouin", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "EGMP_GroinCou"
+ } else if (grepl(pattern = "Ensembert", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "EGMP_PasEmsembert"
+ } else if (grepl(pattern = "Brée-les-Bains", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "EGMP_BreeBains"
+ } else if (grepl(pattern = "Antiochat", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "EGMP_PerreAntiochat"
+ } else if (grepl(pattern = "Chassiron", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "EGMP_Chassiron"
+ } else if (grepl(pattern = "zone p", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "BASQ_FlotsBleusZP"
+ } else if (grepl(pattern = "zone f", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "BASQ_FlotsBleusZF"
+ } else if (grepl(pattern = "Saint-Michel", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "GONB_IlotStMichel"
+ } else if (grepl(pattern = "Quéménès", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "FINS_Quemenes"
+ } else if (grepl(pattern = "Goulenez", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "FINS_SeinGoulenez"
+ } else if (grepl(pattern = "Kilaourou", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "FINS_SeinKilaourou"
+ } else if (grepl(pattern = "Verdelet", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "ARMO_Verdelet"
+ } else if (grepl(pattern = "Piégu", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "ARMO_Piegu"
+ } else if (grepl(pattern = "Bilfot", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "ARMO_Bilfot"
+ } else if (grepl(pattern = "Plate", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "ARMO_IlePlate"
+ } else if (grepl(pattern = "Perharidy", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "PDMO_Perharidy"
+ } else if (grepl(pattern = "Keraliou", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "BRES_Keraliou"
+ } else if (grepl(pattern = "Mousterlin", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "FINS_Mousterlin"
+ } else if (grepl(pattern = "Nicolas", qecb$Site[x]) == TRUE) {
+    qecb$Site[x] <- "FINS_StNicolasGlenan"
+ }
+  if (grepl(pattern = "Roz", qecb$site[x]) == TRUE) {
+    qecb$Site[x] <- "FINS_AnseRoz"
+}
+}
+
+# Name for report/plot
+
+qecb <- tibble::add_column(qecb, Site_bis = qecb$Site, .after = "Site")
+
+qecb$Site_bis <- ifelse(qecb$Site == "GDMO_Locmariaquer", "Locmariaquer", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "GDMO_BegLann", "Beg Lann", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "FOUR_PlateauFour", "Plateau du Four", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "EGMP_GroinCou", "Groin du Cou", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "EGMP_PasEmsembert", "Le Pas d'Emsembert", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "EGMP_BreeBains", "La Brée-les-Bains", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "EGMP_PerreAntiochat", "Le Perré d'Antiochat", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "EGMP_Chassiron", "Chassiron", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "BASQ_FlotsBleusZP", "Les Flots Bleus / zone pêcheurs", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "BASQ_FlotsBleusZF", "Les Flots Bleus / zone familles", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "GONB_IlotStMichel", "Îlot Saint-Michel", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "FINS_Quemenes", "Quéménès", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "FINS_SeinGoulenez", "Île de Sein - Goulenez", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "FINS_SeinKilaourou", "Île de Sein - Kilaourou", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "ARMO_Verdelet", "Îlot du Verdelet", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "ARMO_Piegu", "Piégu", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "ARMO_Bilfot", "Pointe de Bilfot", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "ARMO_IlePlate", "Île Plate", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "PDMO_Perharidy", "Perharidy", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "BRES_Keraliou", "Keraliou", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "FINS_Mousterlin", "Pointe de Mousterlin", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "FINS_StNicolasGlenan", "Saint-Nicolas des Glénan", qecb$Site_bis)
+qecb$Site_bis <- ifelse(qecb$Site == "FINS_AnseRoz", "Pointe de l'Anse du Roz", qecb$Site_bis)
+
+## change some variables to factor
+
+# change 'X..' variables that are indeed % to numeric; https://stackoverflow.com/questions/59410939/apply-function-to-all-variables-with-string-in-name
+ix <- grep("^X..", names(qecb))
+qecb[ix] <- lapply(qecb[ix], as.numeric)
+rm(ix)
+
+
+## save the final, complete qecb df_
+
+qecb <- qecb[, c(72:107, 1:71)]
+
+## qecb df preparation prior qecb calculation
+
+# Several issues to solve in the df first
+
+
+qecb$Type.Bloc <- factor(qecb$Type.Bloc, levels = c("Bloc mobile", "Bloc fixé", "Roche en place"))
+
+qecb$Face <- factor(qecb$Face, levels = c("face supérieure", "face inférieure"))
+
+qecb <- dplyr::arrange(qecb, Type.Bloc, Face, Numéro.Bloc.échantillon)
+
+qecb <- tibble::add_column(qecb, site_year_month_day = paste0(qecb$Site, ".", qecb$Year, ".", qecb$Month, ".", qecb$Day), .after = "Site_bis")
+
+# save qecb as a new df_ for analysis purpose => several changes to operate to run the code and functions
+
+qecbnew <- qecb
+
+# df with list object nb and corresponding site_year_month_day value to solve for loop issues
+
+df_list_loop <- data.frame("site_year_month_day" = unique(qecbnew$site_year_month_day),
+     "loop nb" = c(1:seq_along(unique(qecbnew$site_year_month_day))))
+
+# dplyr::filter for df that makes problem, then eventually correct in the dataframe for wrong coding; brackets (xx) for nb because will change when qecb df_ enlarged.
+# these listed boulder field survey error when highlighted when running the loop, that ran into an error ; it was a step by step procedure with solving one listed observation after another when issues appeared. Surely not the best way to proceed, maybe better just to skip these surveys (site + date), but in the present case I wanted to keep most of the observations, therefore I corrected them manually whenever needed.
+
+# list nb (28) - EGMP_BreeBains.2016.04.06
+qecbnew$Face <- as.character(qecbnew$Face)
+qecbnew$Face <- ifelse(qecbnew$ID.Fiche == "BDD_IVR&QECB_La Bree_20160406_VImport.xlsx" & qecbnew$Référence.bloc == "avr16-LaBreeB9sup", "face supérieure", qecbnew$Face)
+qecbnew$Face <- ifelse(qecbnew$ID.Fiche == "BDD_IVR&QECB_La Bree_20160406_VImport.xlsx" & qecbnew$Référence.bloc == "avr16-LaBreeB10sup", "face supérieure", qecbnew$Face)
+qecbnew$Face <- as.factor(qecbnew$Face)
+
+# list nb 33 - EGMP_PerreAntiochat.2016.04.07
+qecbnew$Face <- as.character(qecbnew$Face)
+qecbnew$Face <- ifelse(qecbnew$ID.Fiche == "BDD_IVR&QECB_PerAnt_20160407_VImport.xlsx" & qecbnew$Référence.bloc == "avr16-PerAntB9sup", "face supérieure", qecbnew$Face)
+qecbnew$Face <- ifelse(qecbnew$ID.Fiche == "BDD_IVR&QECB_PerAnt_20160407_VImport.xlsx" & qecbnew$Référence.bloc == "avr16-PerAntB10sup", "face supérieure", qecbnew$Face)
+qecbnew$Face <- as.factor(qecbnew$Face)
+
+# list nb 37 - EGMP_Chassiron.2016.03.09
+qecbnew$Face <- as.character(qecbnew$Face)
+qecbnew$Face <- ifelse(qecbnew$ID.Fiche == "BDD_IVR&QECB_Chassiron_20160309&10_VImport.xlsx" & qecbnew$Référence.bloc == "mars16-ChassB9sup", "face supérieure", qecbnew$Face)
+qecbnew$Face <- ifelse(qecbnew$ID.Fiche == "BDD_IVR&QECB_Chassiron_20160309&10_VImport.xlsx" & qecbnew$Référence.bloc == "mars16-ChasB10sup", "face supérieure", qecbnew$Face)
+qecbnew$Face <- as.factor(qecbnew$Face)
+
+# list nb 76 - ARMO_Verdelet.2015.03.23
+qecbnew$Face <- as.character(qecbnew$Face)
+qecbnew$Face <- ifelse(qecbnew$ID.Fiche == "BDD_IVR&QECB_Verdelet_20150323_VImport.xlsx" & qecbnew$Référence.bloc == "mar15-VerB10inf", "face inférieure", qecbnew$Face)
+qecbnew$Face <- as.factor(qecbnew$Face)
+
+# list nb 116 - "GDMO_Locmariaquer.2018.09.10"
+qecbnew$Type.Bloc <- as.character(qecbnew$Type.Bloc)
+qecbnew$Type.Bloc <- ifelse(qecbnew$ID.Fiche == "2018-09-10-GDMO-CDB-001" & qecbnew$Numero.Photo == "2018-09-10_GDMO_01_CDB-5_sup_392578.jpg", "Roche en place", qecbnew$Type.Bloc)
+qecbnew$Type.Bloc <- as.factor(qecbnew$Type.Bloc)
+qecbnew$quadrat_bis <- ifelse(qecbnew$ID.Fiche == "2018-09-10-GDMO-CDB-001" & qecbnew$Numero.Photo == "2018-09-10_GDMO_01_CDB-5_sup_392578.jpg", "Q5", qecbnew$quadrat_bis)
+qecbnew <- qecbnew %>% dplyr::filter(!(ID.Fiche == "2018-09-10-GDMO-CDB-001" & Numero.Photo == ""))
+
+# Few sites to remove prior running the for loop because it was not just a encoding mistake for one data, but a globally wroing coding for the site + date survey.
+
+qecb_i <- qecbnew  %>% dplyr::filter(site_year_month_day == "FINS_StNicolasGlenan.2016.04.08") # no bloc fixe !
+qecbnew <- qecbnew  %>% dplyr::filter(site_year_month_day != "FINS_StNicolasGlenan.2016.04.08")
+qecb_i <- qecbnew  %>% dplyr::filter(site_year_month_day == "GDMO_Locmariaquer.2019.09.30") # most faces of blocs mobiles do not correspond to each other; only 3 over 10 boulder have data for both face supérieure and face inférieure
+qecbnew <- qecbnew  %>% dplyr::filter(site_year_month_day != "GDMO_Locmariaquer.2019.09.30")
+rm(df_list_loop, qecb_i)
+
+
+# check for species with count within sub-0.1m^2-quadrat (i.e. reduced size quadrat compare to most organisms on boulder to count them, because abundant ; then some extrapolation)
+
+# first for Spirobranchus
+
+qecbnew$Nb.Spirobranchus.lamarckii.total.ini <- qecbnew$Nb.Spirobranchus.lamarckii.total
+qecbnew$Nb.Spirobranchus.lamarckii.total <- as.character(qecbnew$Nb.Spirobranchus.lamarckii.total)
+
+
+qecbnew_spirobranchus <- (dplyr::filter(qecbnew, Nb.Spirobranchus.lamarckii.total %in% c(NA, "NaN", "Inf", "-Inf")))
+qecbnew_spirobranchus[, c("Nb.Spirobranchus.lamarckii.1B", "Nb.Spirobranchus.lamarckii.2B", "Nb.Spirobranchus.lamarckii.3B", "Nb.Spirobranchus.lamarckii.4B", "Nb.Spirobranchus.lamarckii.5B")] <- sapply(qecbnew_spirobranchus[, c("Nb.Spirobranchus.lamarckii.1B", "Nb.Spirobranchus.lamarckii.2B", "Nb.Spirobranchus.lamarckii.3B", "Nb.Spirobranchus.lamarckii.4B", "Nb.Spirobranchus.lamarckii.5B")], as.character)
+(spirobranchus_data <- subset(qecbnew_spirobranchus, !is.na(qecbnew_spirobranchus$Nb.Spirobranchus.lamarckii.1B) || !is.na(qecbnew_spirobranchus$Nb.Spirobranchus.lamarckii.2B) || !is.na(qecbnew_spirobranchus$Nb.Spirobranchus.lamarckii.3B) || !is.na(qecbnew_spirobranchus$Nb.Spirobranchus.lamarckii.4B) || !is.na(qecbnew_spirobranchus$Nb.Spirobranchus.lamarckii.5B))[, c("site_year_month_day", "Nb.Spirobranchus.lamarckii.1B", "Nb.Spirobranchus.lamarckii.2B", "Nb.Spirobranchus.lamarckii.3B", "Nb.Spirobranchus.lamarckii.4B", "Nb.Spirobranchus.lamarckii.5B", "Nb.Spirobranchus.lamarckii.total")])
+
+quemenes <- dplyr::filter(qecbnew, Site == "FINS_Quemenes")
+quemenes <- dplyr::arrange(quemenes, date_fiche)
+# for Quemenes, issue because for sampling date "FINS_Quemenes.2015.09.30" the 5 counts of Spirobranchus were encoded in 1B instead of total !!! I noticed this issue when mining data (see below), therefore I corrected before running below script for Spirobranchus.
+qecbnew$Nb.Spirobranchus.lamarckii.total <- ifelse(qecbnew$site_year_month_day == "FINS_Quemenes.2015.09.30" & is.na(qecbnew$Nb.Spirobranchus.lamarckii.total), qecbnew$Nb.Spirobranchus.lamarckii.1B, qecbnew$Nb.Spirobranchus.lamarckii.total)
+
+(quemenes <- dplyr::filter(qecbnew, site_year_month_day == "FINS_Quemenes.2015.09.30")[, c("site_year_month_day", "Nb.Spirobranchus.lamarckii.1B", "Nb.Spirobranchus.lamarckii.2B", "Nb.Spirobranchus.lamarckii.3B", "Nb.Spirobranchus.lamarckii.4B", "Nb.Spirobranchus.lamarckii.5B", "Nb.Spirobranchus.lamarckii.total")])
+rm(quemenes)
+
+seinkilaourou <- dplyr::filter(qecbnew, Site == "FINS_SeinKilaourou")
+seinkilaourou <- dplyr::arrange(seinkilaourou, date_fiche)
+# same issue with SeinKilaourou
+qecbnew$Nb.Spirobranchus.lamarckii.total <- ifelse(qecbnew$site_year_month_day == "FINS_SeinKilaourou.2015.04.21" & is.na(qecbnew$Nb.Spirobranchus.lamarckii.total), qecbnew$Nb.Spirobranchus.lamarckii.1B, qecbnew$Nb.Spirobranchus.lamarckii.total)
+(seinkilaourou <- dplyr::filter(qecbnew, site_year_month_day == "FINS_SeinKilaourou.2015.04.21")[, c("site_year_month_day", "Nb.Spirobranchus.lamarckii.1B", "Nb.Spirobranchus.lamarckii.2B", "Nb.Spirobranchus.lamarckii.3B", "Nb.Spirobranchus.lamarckii.4B", "Nb.Spirobranchus.lamarckii.5B", "Nb.Spirobranchus.lamarckii.total")])
+rm(seinkilaourou)
+
+# some more issues however with "x100"count data
+spirobranchus <- subset(qecbnew, !is.na(qecbnew$Nb.Spirobranchus.lamarckii.1B) & !is.na(qecbnew$Nb.Spirobranchus.lamarckii.2B) & !is.na(qecbnew$Nb.Spirobranchus.lamarckii.3B) & !is.na(qecbnew$Nb.Spirobranchus.lamarckii.4B) & !is.na(qecbnew$Nb.Spirobranchus.lamarckii.5B) & !is.na(qecbnew$Nb.Spirobranchus.lamarckii.total))[, c("site_year_month_day", "Nb.Spirobranchus.lamarckii.1B", "Nb.Spirobranchus.lamarckii.2B", "Nb.Spirobranchus.lamarckii.3B", "Nb.Spirobranchus.lamarckii.4B", "Nb.Spirobranchus.lamarckii.5B", "Nb.Spirobranchus.lamarckii.total")]
+
+for (i in c(1:nrow(spirobranchus))) {
+  spirobranchus$mean.x.100[[i]] <- sum(spirobranchus[i, c(2:6)], na.rm = TRUE) / sum(!is.na(spirobranchus[i, c(2:6)])) * 100
+}
+
+spirobranchus$mean.x.100 <- unlist(spirobranchus$mean.x.100)
+spirobranchus$Nb.Spirobranchus.lamarckii.total <- as.numeric(spirobranchus$Nb.Spirobranchus.lamarckii.total)
+for (i in c(1:nrow(spirobranchus))) {
+  spirobranchus$diff[[i]] <- spirobranchus[i, "Nb.Spirobranchus.lamarckii.total"] - spirobranchus[i, "mean.x.100"]
+}
+
+spirobranchus$diff <- abs(as.integer(spirobranchus$diff))
+spirobranchus <- dplyr::arrange(spirobranchus, desc(diff), mean.x.100)
+spirobranchus <- dplyr::arrange(dplyr::filter(spirobranchus, diff != 0 & mean.x.100 != 0), desc(diff))
+
+# check it all in the qecbnew df
+
+for (i in c(1:nrow(qecbnew))) {
+  qecbnew$mean.x.100[[i]] <-
+    sum(qecbnew[i, c("Nb.Spirobranchus.lamarckii.1B", "Nb.Spirobranchus.lamarckii.2B", "Nb.Spirobranchus.lamarckii.3B", "Nb.Spirobranchus.lamarckii.4B", "Nb.Spirobranchus.lamarckii.5B")], na.rm = TRUE) / sum(!is.na(qecbnew[i, c("Nb.Spirobranchus.lamarckii.1B", "Nb.Spirobranchus.lamarckii.2B", "Nb.Spirobranchus.lamarckii.3B", "Nb.Spirobranchus.lamarckii.4B", "Nb.Spirobranchus.lamarckii.5B")])) * 100
+} # sum of only NAs/0 = NaN; so replace NaN by Na
+qecbnew$mean.x.100 <- as.character(qecbnew$mean.x.100)
+
+
+for (i in c(1:nrow(qecbnew))) {
+  qecbnew$mean.x.100[[i]] <- ifelse(qecbnew$mean.x.100[[i]] == "NaN", NA, qecbnew$mean.x.100[[i]])
+}
+qecbnew$mean.x.100 <- as.integer(qecbnew$mean.x.100)
+
+qecbnew$Nb.Spirobranchus.lamarckii.total <- as.integer(qecbnew$Nb.Spirobranchus.lamarckii.total)
+qecbnew$Nb.Spirobranchus.lamarckii.total.diff <- abs((qecbnew$Nb.Spirobranchus.lamarckii.total - qecbnew$mean.x.100))
+spirobranchus_diff <- qecbnew[, c("Nb.Spirobranchus.lamarckii.1B", "Nb.Spirobranchus.lamarckii.2B", "Nb.Spirobranchus.lamarckii.3B", "Nb.Spirobranchus.lamarckii.4B", "Nb.Spirobranchus.lamarckii.5B", "Nb.Spirobranchus.lamarckii.total", "Nb.Spirobranchus.lamarckii.total.ini", "mean.x.100", "Nb.Spirobranchus.lamarckii.total.diff")]
+spirobranchus_diff <- dplyr::arrange(spirobranchus_diff, desc(Nb.Spirobranchus.lamarckii.total.diff), mean.x.100)
+spirobranchus_diff <- dplyr::arrange(dplyr::filter(spirobranchus_diff, Nb.Spirobranchus.lamarckii.total.diff != 0 & mean.x.100 != 0), desc(Nb.Spirobranchus.lamarckii.total.diff))
+
+qecbnew$Nb.Spirobranchus.lamarckii.total <- ifelse(qecbnew$Nb.Spirobranchus.lamarckii.total.diff != 0 & qecbnew$mean.x.100 != 0, qecbnew$mean.x.100, qecbnew$Nb.Spirobranchus.lamarckii.total)
+spirobranchus_diff <- qecbnew[, c("Nb.Spirobranchus.lamarckii.1B", "Nb.Spirobranchus.lamarckii.2B", "Nb.Spirobranchus.lamarckii.3B", "Nb.Spirobranchus.lamarckii.4B", "Nb.Spirobranchus.lamarckii.5B", "Nb.Spirobranchus.lamarckii.total", "Nb.Spirobranchus.lamarckii.total.ini", "mean.x.100", "Nb.Spirobranchus.lamarckii.total.diff")]
+spirobranchus_diff$Nb.Spirobranchus.lamarckii.total.diff <- abs(as.integer(spirobranchus_diff$Nb.Spirobranchus.lamarckii.total.diff))
+spirobranchus_diff <- dplyr::arrange(spirobranchus_diff, desc(Nb.Spirobranchus.lamarckii.total.diff), mean.x.100)
+spirobranchus_diff <- dplyr::arrange(dplyr::filter(spirobranchus_diff, Nb.Spirobranchus.lamarckii.total.diff != 0 & mean.x.100 != 0), desc(Nb.Spirobranchus.lamarckii.total.diff))
+# ok, change made when data x 100 was not correct.
+
+# finally, change NA by mean.x100 for Spirobranchus total
+qecbnew$Nb.Spirobranchus.lamarckii.total <- as.character(qecbnew$Nb.Spirobranchus.lamarckii.total)
+for (i in c(1:nrow(qecbnew))) {
+  qecbnew$Nb.Spirobranchus.lamarckii.total[[i]] <- ifelse(qecbnew$Nb.Spirobranchus.lamarckii.total[[i]] %in% c(NA, "NaN", "Inf", "-Inf"), sum(qecbnew[i, c("Nb.Spirobranchus.lamarckii.1B", "Nb.Spirobranchus.lamarckii.2B", "Nb.Spirobranchus.lamarckii.3B", "Nb.Spirobranchus.lamarckii.4B", "Nb.Spirobranchus.lamarckii.5B")], na.rm = TRUE) / sum(!is.na(qecbnew[i, c("Nb.Spirobranchus.lamarckii.1B", "Nb.Spirobranchus.lamarckii.2B", "Nb.Spirobranchus.lamarckii.3B", "Nb.Spirobranchus.lamarckii.4B", "Nb.Spirobranchus.lamarckii.5B")])) * 100, qecbnew$Nb.Spirobranchus.lamarckii.total[[i]])
+} # sum of only NAs/0 = NaN; so replace NaN by Na
+
+
+for (i in c(1:nrow(qecbnew))) {
+  qecbnew$Nb.Spirobranchus.lamarckii.total[[i]] <- ifelse(qecbnew$Nb.Spirobranchus.lamarckii.total[[i]] == "NaN", NA, qecbnew$Nb.Spirobranchus.lamarckii.total[[i]])
+}
+
+qecbnew$Nb.Spirobranchus.lamarckii.total <- as.integer(qecbnew$Nb.Spirobranchus.lamarckii.total)
+
+qecbnew$Nb.Spirobranchus.lamarckii.total.diff <- abs(qecbnew$Nb.Spirobranchus.lamarckii.total - qecbnew$Nb.Spirobranchus.lamarckii.total.ini)
+spirobranchus_diff <- qecbnew[, c("Nb.Spirobranchus.lamarckii.1B", "Nb.Spirobranchus.lamarckii.2B", "Nb.Spirobranchus.lamarckii.3B", "Nb.Spirobranchus.lamarckii.4B", "Nb.Spirobranchus.lamarckii.5B", "Nb.Spirobranchus.lamarckii.total", "Nb.Spirobranchus.lamarckii.total.ini", "mean.x.100", "Nb.Spirobranchus.lamarckii.total.diff")]
+spirobranchus_diff <- dplyr::arrange(spirobranchus_diff, desc(Nb.Spirobranchus.lamarckii.total.diff), mean.x.100)
+spirobranchus_diff <- dplyr::arrange(dplyr::filter(spirobranchus_diff, Nb.Spirobranchus.lamarckii.total.diff != 0 & mean.x.100 != 0), desc(Nb.Spirobranchus.lamarckii.total.diff))
+
+qecbnew <- subset(qecbnew, select = -c(Nb.Spirobranchus.lamarckii.total.ini, mean.x.100, Nb.Spirobranchus.lamarckii.total.diff))
+
+rm(qecbnew_spirobranchus, spirobranchus, spirobranchus_data, spirobranchus_diff)
+
+# do the same for spirorbis
+
+qecbnew$Nb.spirorbis.total.ini <- qecbnew$Nb.spirorbis.total
+qecbnew$Nb.spirorbis.total <- as.character(qecbnew$Nb.spirorbis.total)
+
+qecbnew_spirorbis <- (dplyr::filter(qecbnew, Nb.spirorbis.total %in% c(NA, "NaN", "Inf", "-Inf")))
+qecbnew_spirorbis[, c("Nb.spirorbis.1A", "Nb.spirorbis.2A", "Nb.spirorbis.3A", "Nb.spirorbis.4A", "Nb.spirorbis.5A")] <- sapply(qecbnew_spirorbis[, c("Nb.spirorbis.1A", "Nb.spirorbis.2A", "Nb.spirorbis.3A", "Nb.spirorbis.4A", "Nb.spirorbis.5A")], as.character)
+(spirobranchus_data <- subset(qecbnew_spirorbis, !is.na(qecbnew_spirorbis$Nb.spirorbis.1A) || !is.na(qecbnew_spirorbis$Nb.spirorbis.2A) || !is.na(qecbnew_spirorbis$Nb.spirorbis.3A) || !is.na(qecbnew_spirorbis$Nb.spirorbis.4A) || !is.na(qecbnew_spirorbis$Nb.spirorbis.5A))[, c("site_year_month_day", "Nb.spirorbis.1A", "Nb.spirorbis.2A", "Nb.spirorbis.3A", "Nb.spirorbis.4A", "Nb.spirorbis.5A", "Nb.spirorbis.total")])
+
+# In contrast to Spirobranchus data, no encoding issues for spirorbis data, cfr when sub-quadrat 1A-5A are ALL encoded, NA for total.
+
+# some more issues however with "x200"count data
+
+spirorbis <- subset(qecbnew, !is.na(qecbnew$Nb.spirorbis.1A) & !is.na(qecbnew$Nb.spirorbis.2A) & !is.na(qecbnew$Nb.spirorbis.3A) & !is.na(qecbnew$Nb.spirorbis.4A) & !is.na(qecbnew$Nb.spirorbis.5A) & !is.na(qecbnew$Nb.spirorbis.total))[, c("site_year_month_day", "Nb.spirorbis.1A", "Nb.spirorbis.2A", "Nb.spirorbis.3A", "Nb.spirorbis.4A", "Nb.spirorbis.5A", "Nb.spirorbis.total")]
+for (i in c(1:nrow(spirorbis))) {
+    spirorbis$mean.x.200[[i]] <- sum(spirorbis[i, c(2:6)], na.rm = TRUE) / sum(!is.na(spirorbis[i, c(2:6)])) * 200
+}
+spirorbis$mean.x.200 <- unlist(spirorbis$mean.x.200)
+spirorbis$Nb.spirorbis.total <- as.numeric(spirorbis$Nb.spirorbis.total)
+for (i in c(1:nrow(spirorbis))) {
+  spirorbis$diff[[i]] <- spirorbis[i, "Nb.spirorbis.total"] - spirorbis[i, "mean.x.200"]
+}
+spirorbis$diff <- abs(as.integer(spirorbis$diff))
+spirorbis <- dplyr::arrange(spirorbis, desc(diff), mean.x.200)
+(gonb_ilotstmichel_2015_04_18 <- dplyr::filter(spirorbis, site_year_month_day == "GONB_IlotStMichel.2015.04.18"))
+rm(gonb_ilotstmichel_2015_04_18)
+spirorbis <- dplyr::arrange(dplyr::filter(spirorbis, diff != 0 & mean.x.200 != 0), desc(diff))
+
+# check it all in the qecbnew df
+
+for (i in c(1:nrow(qecbnew))) {
+    qecbnew$mean.x.200[[i]] <- sum(qecbnew[i, c("Nb.spirorbis.1A", "Nb.spirorbis.2A", "Nb.spirorbis.3A", "Nb.spirorbis.4A", "Nb.spirorbis.5A")], na.rm = TRUE) / sum(!is.na(qecbnew[i, c("Nb.spirorbis.1A", "Nb.spirorbis.2A", "Nb.spirorbis.3A", "Nb.spirorbis.4A", "Nb.spirorbis.5A")])) * 200
+} # sum of only NAs/0 = NaN; so replace NaN by Na
+qecbnew$mean.x.200 <- as.character(qecbnew$mean.x.200)
+
+for (i in c(1:nrow(qecbnew))) {
+  qecbnew$mean.x.200[[i]] <- ifelse(qecbnew$mean.x.200[[i]] == "NaN", NA, qecbnew$mean.x.200[[i]])
+}
+
+qecbnew$mean.x.200 <- as.integer(qecbnew$mean.x.200)
+
+qecbnew$Nb.spirorbis.total <- as.integer(qecbnew$Nb.spirorbis.total)
+qecbnew$Nb.spirorbis.total.diff <- abs((qecbnew$Nb.spirorbis.total - qecbnew$mean.x.200))
+spirorbis_diff <- qecbnew[, c("Nb.spirorbis.1A", "Nb.spirorbis.2A", "Nb.spirorbis.3A", "Nb.spirorbis.4A", "Nb.spirorbis.5A", "Nb.spirorbis.total", "Nb.spirorbis.total.ini", "mean.x.200", "Nb.spirorbis.total.diff")]
+spirorbis_diff <- dplyr::arrange(spirorbis_diff, desc(Nb.spirorbis.total.diff), mean.x.200)
+spirorbis_diff <- dplyr::arrange(dplyr::filter(spirorbis_diff, Nb.spirorbis.total.diff != 0 & mean.x.200 != 0), desc(Nb.spirorbis.total.diff))
+
+qecbnew$Nb.spirorbis.total <- ifelse(qecbnew$Nb.spirorbis.total.diff != 0 & qecbnew$mean.x.200 != 0, qecbnew$mean.x.200, qecbnew$Nb.spirorbis.total)
+spirorbis_diff <- qecbnew[, c("Nb.spirorbis.1A", "Nb.spirorbis.2A", "Nb.spirorbis.3A", "Nb.spirorbis.4A", "Nb.spirorbis.5A", "Nb.spirorbis.total", "Nb.spirorbis.total.ini", "mean.x.200", "Nb.spirorbis.total.diff")]
+spirorbis_diff$Nb.spirorbis.total.diff <- abs(as.integer(spirorbis_diff$Nb.spirorbis.total.diff))
+spirorbis_diff <- dplyr::arrange(spirorbis_diff, desc(Nb.spirorbis.total.diff), mean.x.200)
+spirorbis_diff <- dplyr::arrange(dplyr::filter(spirorbis_diff, Nb.spirorbis.total.diff != 0 & mean.x.200 != 0), desc(Nb.spirorbis.total.diff))
+# ok, change made when data x 200 was not correct.
+
+# finally, change NA by mean.x200 for spirorbis total
+qecbnew$Nb.spirorbis.total <- as.character(qecbnew$Nb.spirorbis.total)
+for (i in c(1:nrow(qecbnew))) {
+  qecbnew$Nb.spirorbis.total[[i]] <- ifelse(qecbnew$Nb.spirorbis.total[[i]] %in% c(NA, "NaN", "Inf", "-Inf"), sum(qecbnew[i, c("Nb.spirorbis.1A", "Nb.spirorbis.2A", "Nb.spirorbis.3A", "Nb.spirorbis.4A", "Nb.spirorbis.5A")], na.rm = TRUE) / sum(!is.na(qecbnew[i, c("Nb.spirorbis.1A", "Nb.spirorbis.2A", "Nb.spirorbis.3A", "Nb.spirorbis.4A", "Nb.spirorbis.5A")])) * 200, qecbnew$Nb.spirorbis.total[[i]])
+} # sum of only NAs/0 = NaN; so replace NaN by Na
+
+for (i in c(1:nrow(qecbnew))) {
+  qecbnew$Nb.spirorbis.total[[i]] <- ifelse(qecbnew$Nb.spirorbis.total[[i]] == "NaN", NA, qecbnew$Nb.spirorbis.total[[i]])
+}
+
+qecbnew$Nb.spirorbis.total <- as.integer(qecbnew$Nb.spirorbis.total)
+
+qecbnew$Nb.spirorbis.total.diff <- abs(qecbnew$Nb.spirorbis.total - qecbnew$Nb.spirorbis.total.ini)
+spirorbis_diff <- qecbnew[, c("Nb.spirorbis.1A", "Nb.spirorbis.2A", "Nb.spirorbis.3A", "Nb.spirorbis.4A", "Nb.spirorbis.5A", "Nb.spirorbis.total", "Nb.spirorbis.total.ini", "mean.x.200", "Nb.spirorbis.total.diff")]
+spirorbis_diff <- dplyr::arrange(spirorbis_diff, desc(Nb.spirorbis.total.diff), mean.x.200)
+spirorbis_diff <- dplyr::arrange(dplyr::filter(spirorbis_diff, Nb.spirorbis.total.diff != 0 & mean.x.200 != 0), desc(Nb.spirorbis.total.diff))
+
+qecbnew <- subset(qecbnew, select = -c(Nb.spirorbis.total.ini, mean.x.200, Nb.spirorbis.total.diff))
+
+rm(qecbnew_spirorbis, spirorbis, spirobranchus_data, spirorbis_diff, i)
+
+
+# dplyr::filter for abnormal data, based on histogram distribution of data
+
+dplyr::filter(qecbnew, X..algues.brunes > 100)[, c("Site", "date_fiche", "Type.Bloc", "Numéro.Bloc.échantillon", "Face", "X..algues.brunes")]
+qecbnew$X..algues.brunes <- ifelse(qecbnew$X..algues.brunes > 100, 100, qecbnew$X..algues.brunes)
+dplyr::filter(qecbnew, X..algues.rouges > 100)[, c("Site", "date_fiche", "Type.Bloc", "Numéro.Bloc.échantillon", "Face", "X..algues.rouges")]
+qecbnew$X..algues.rouges <- ifelse(qecbnew$X..algues.rouges > 100, 100, qecbnew$X..algues.rouges)
+
+
+## SCRIPT I - NAs <- 0 ; cfr previous comment makes no sense to have NA encoded when the presence of an organism is in reality = 0
+
+# We are facing an issues with NA observations, because either they were not measured/counted, then they are effectively NAs; or these NAs = indeed "0"; but I cannot have NAs for variables that are included in the index determination, cfr if 5+0 = 5, 5+NA = NA; see for example site_year_month_day == "ARMO_Bilfot.2014.04.28", Nb.Spirobranchus.lamarckii.total is NA ...
+# I theregore change these NAs by 0
+
+# replace NAs by "0" for variables used in qecb determination
+qecbnew[, c("X..algues.brunes",
+          "X..algues.rouges",
+          "X..Lithophyllum",
+          "X..Cladophora",
+          "Nb.Littorina.obtusata",
+          "Nb.Gibbula.cineraria",
+          "Nb.Gibbula.pennanti",
+          "Nb.Gibbula.umbilicalis",
+          "X..Eponges",
+          "X..Ascidies.Coloniales",
+          "X..Ascidies.Solitaires",
+          "X..Bryozoaires.Dresses",
+          "X..algues.vertes",
+          "X..Roche.Nue",
+          "Nb.spirorbis.total",
+          "X..Balanes.Vivantes",
+          "Nb.Spirobranchus.lamarckii.total",
+          "X..Surface.Accolement")] <- lapply(qecbnew[,
+               c("X..algues.brunes",
+                 "X..algues.rouges",
+                 "X..Lithophyllum",
+                 "X..Cladophora",
+                 "Nb.Littorina.obtusata",
+                 "Nb.Gibbula.cineraria",
+                 "Nb.Gibbula.pennanti",
+                 "Nb.Gibbula.umbilicalis",
+                 "X..Eponges",
+                 "X..Ascidies.Coloniales",
+                 "X..Ascidies.Solitaires",
+                 "X..Bryozoaires.Dresses",
+                 "X..algues.vertes",
+                 "X..Roche.Nue",
+                 "Nb.spirorbis.total",
+                 "X..Balanes.Vivantes",
+                 "Nb.Spirobranchus.lamarckii.total",
+                 "X..Surface.Accolement")],
+  function(x) replace(x, is.na(x), 0))
+
+# and also replace NA for bivalve by 0 for EGMP and BASQ surveys cfr for accollement correction later on.
+
+qecbnew$X..Mytilus.sp. <- ifelse((substr(qecbnew$Site, 1, 4) %in% c("EGMP", "BASQ")) & is.na(qecbnew$X..Mytilus.sp.), 0, qecbnew$X..Mytilus.sp.)
+qecbnew$Nb.Crassostrea.gigas <- ifelse((substr(qecbnew$Site, 1, 4) %in% c("EGMP", "BASQ")) & is.na(qecbnew$Nb.Crassostrea.gigas), 0, qecbnew$Nb.Crassostrea.gigas)
+qecbnew$Nb.Ostrea.edulis <- ifelse((substr(qecbnew$Site, 1, 4) %in% c("EGMP", "BASQ")) & is.na(qecbnew$Nb.Ostrea.edulis), 0, qecbnew$Nb.Ostrea.edulis)
+
+
+# add a region variable
+region <- rep(NA, nrow(qecbnew))
+qecbnew <- tibble::add_column(qecbnew, region, .after = "Site_bis")
+qecbnew$region <- ifelse(qecbnew$Site %in% c("EGMP_GroinCou", "EGMP_PasEmsembert",    "EGMP_BreeBains", "EGMP_PerreAntiochat", "EGMP_Chassiron", "BASQ_FlotsBleusZP", "BASQ_FlotsBleusZF"), "EGMP.BASQ", "Bretagne")
+rm(region)
+qecbnew <- dplyr::arrange(qecbnew, region, site_year_month_day, Type.Bloc, Numéro.Bloc.échantillon, Face)
+
+# accolement function according to recent 'retournement'
+
+## before I go further ahead, I have to correct for surface d'accollement for several variable for BM.FI !!
+
+# not the same file name between script qecb script (qecbNew) and this script (qecbNew); doesn't matter, only appears here in the first dplyr::filter lines.
+
+qecbnew <- tibble::add_column(qecbnew, terri_ = substr(qecbnew$Site, 1, 4), .after = "Site_bis")
+
+qecbnew$X..Eponges_ini <- qecbnew$X..Eponges
+qecbnew$X..Ascidies.Coloniales_ini <- qecbnew$X..Ascidies.Coloniales
+qecbnew$X..Ascidies.Solitaires_ini <- qecbnew$X..Ascidies.Solitaires
+qecbnew$X..Bryozoaires.Dresses_ini <- qecbnew$X..Bryozoaires.Dresses
+qecbnew$X..Lithophyllum_ini <- qecbnew$X..Lithophyllum
+qecbnew$X..Balanes.Vivantes_ini <- qecbnew$X..Balanes.Vivantes
+
+df_bm_fs <- qecbnew %>% dplyr::filter(Type.Bloc == "Bloc mobile" & Face == "face supérieure")
+df_bm_fi <- qecbnew %>% dplyr::filter(Type.Bloc == "Bloc mobile" & Face == "face inférieure")
+df_bf <- qecbnew %>% dplyr::filter(Type.Bloc != "Bloc mobile")
+
+`%notin%` <- Negate(`%in%`)
+
+acco_fct <- function(var_) {
+
+  df_bm_fi$var_cor.acco. <<- NA
+
+  for (i in c(1:nrow(df_bm_fi))) {
+
+    df_bm_fi$var_cor.acco.[[i]] <<- if (df_bm_fi$terri_[[i]] %notin% c("EGMP", "BASQ")) {
+      ifelse(#df_$Couleur.dominante %in% c("Rouge", "Brune", "Brune-Rouge") ||
+        df_bm_fs$Couleur.dominante[[i]] %in% c("Blanche", "Verte", "Blanche-Verte", "Colorée"), df_bm_fi[i, var_] / (100 - df_bm_fi$X..Surface.Accolement[[i]]) * 100, df_bm_fi[i, var_])
+    } else {
+      ifelse(df_bm_fs$Couleur.dominante[[i]] %in% c("Blanche", "Verte", "Blanche-Verte", "Colorée")
+             & df_bm_fi$X..Surface.Accolement[[i]] != 0 # I have to use it in dplyr::filter this time as well for EGMP- BASQ (but not for Bretagne, although could be added, same result); identical/repeated measure for BM.FI and BM.FS
+             & df_bm_fs$X..Mytilus.sp.[[i]] == 0, df_bm_fi[i, var_] / (100 - df_bm_fi$X..Surface.Accolement[[i]]) * 100, df_bm_fi[i, var_])
+    }
+
+  }
+
+}
+
+# I would only consider colors in c("Rouge", "Brune", "Brune-Rouge") for BM.FI correction [ and not the series c("Blanche-Brune", "Rouge", "Brune", "Blanche-Rouge", "Brune-Rouge", "Rouge-Verte", "Brune-Verte") ] ; and for BM.FS, the list c("Blanche", "Verte", "Colorée") => we do the correction for BM.FI accollement based on BM.FS color !!!
+
+
+# apply acco_fct to BM.FI variables
+
+apply_acco_fct <- function(var_) {
+
+  show(sort(df_bm_fi[, var_], decreasing = TRUE, index.return = FALSE)[1:50])
+  pre_ <- as.vector(df_bm_fi[, var_])
+  acco_fct(var_)
+  df_bm_fi <<- tibble::add_column(df_bm_fi, var_cor. = df_bm_fi$var_cor.acco., .after = var_)
+  show(sort(df_bm_fi$var_cor., decreasing = TRUE, index.return = FALSE)[1:50])
+  df_bm_fi$var_cor. <<- as.numeric(ifelse(as.character(df_bm_fi$var_cor.) %in% c(NA, "NaN", "-Inf", "Inf"), "0", as.character(df_bm_fi$var_cor.)))
+  df_bm_fi$var_cor. <<- ifelse(df_bm_fi$var_cor. > 100, 100, df_bm_fi$var_cor.)
+  show(sort(df_bm_fi$var_cor., decreasing = TRUE, index.return = FALSE)[1:50])
+  show(length(na.omit(which(abs(as.vector(df_bm_fi$var_cor.) - pre_) != 0))) / na.omit(length(df_bm_fi$var_cor.)) * 100)
+  par(mfrow = c(1, 3))
+  hist(pre_, main = var_, xlab = "pre-corection")
+  hist(df_bm_fi$var_cor., main = var_, xlab = "post-corection")
+  hist(df_bm_fi[as.vector(which(abs(as.vector(df_bm_fi$var_cor.) - pre_) != 0)), var_], main = var_, xlab = "diff. post-pre != 0")
+  par(mfrow = c(1, 1))
+  df_bm_fi <<- df_bm_fi[, -which(names(df_bm_fi) %in% c(var_, "var_cor.acco."))]
+  colnames(df_bm_fi)[colnames(df_bm_fi) == "var_cor."] <<- var_
+
+  rm(pre_)
+
+}
+
+apply_acco_fct("X..Eponges")
+apply_acco_fct("X..Ascidies.Coloniales")
+apply_acco_fct("X..Ascidies.Solitaires")
+apply_acco_fct("X..Bryozoaires.Dresses")
+apply_acco_fct("X..Lithophyllum")
+apply_acco_fct("X..Balanes.Vivantes")
+
+qecbnew <- dplyr::bind_rows(df_bm_fs, df_bm_fi)
+qecbnew <- dplyr::bind_rows(qecbnew, df_bf)
+
+qecbnew <- dplyr::arrange(qecbnew, region, site_year_month_day, Type.Bloc, Numéro.Bloc.échantillon, Face)
+
+# do remove some more data ...
+# "FINS_Quemenes.2020.10.16", bad encoding, I let know Anna Capietto to make changes => was corrected normally, so unactivate next time I download ESTAMP data
+qecbnew <- dplyr::filter(qecbnew, site_year_month_day != "FINS_Quemenes.2020.10.16")
+
+# save the final qecbnew df_
+
+qecb <- qecbnew
+
+
+`%notin%` <- Negate(`%in%`)
+
+## reorder and/or create new variables
+
+# variable site_year_month_day moved for clarity purpose, not needed necessarily
+qecb <- tibble::add_column(qecb, qecb$site_year_month_day, .after = "Site_bis")
+qecb <- qecb[, -which(names(qecb) %in% c("site_year_month_day"))]
+qecb <- dplyr::rename(qecb, site_year_month_day = `qecb$site_year_month_day`)
+
+# new variable period (nothing to see with the existing périod variable)
+period <- rep(NA, nrow(qecb))
+qecb <- tibble::add_column(qecb, period, .after = "Day")
+qecb$period <- ifelse(as.numeric(qecb$Month) < 7, "p1", "p2")
+qecb$period <- as.factor(qecb$period)
+rm(period)
+
+qecb <- dplyr::arrange(qecb, region, site_year_month_day, Type.Bloc, Numéro.Bloc.échantillon, Face)
+
+# NB: les infos surface d'accolement sont dupliquées de la face inf vers la face sup de blocs mobiles (même si peu de sens d'avoir cette info pour les face sup ...)
+# NB: les data "Abondance ressources ciblées par pêcheurs à pied" présentes uniquement pour les blocs mobiles sont dupliquées entre face inf et face sup.
+
+## SCRIPT I - NAs <- 0
+
+# already performed for part in the CB_qecb script ; but here I also consider mobile organisms, logical observation (or not) according to boulders, faces etc ... so more complete. Could be some kind of script fusion to only keep Na to 0 correction in one script, i.e. moving this script to the CB_qecb script ...
+
+bretagne_bm <- dplyr::filter(qecb, region == "Bretagne" & Type.Bloc == "Bloc mobile")
+bretagne_bf <- dplyr::filter(qecb, region == "Bretagne" & Type.Bloc %in% c("Bloc fixé", "Roche en place"))
+egmp_basq_bm <- dplyr::filter(qecb, region == "EGMP.BASQ" & Type.Bloc == "Bloc mobile")
+egmp_basq_bf <- dplyr::filter(qecb, region == "EGMP.BASQ" & Type.Bloc %in% c("Bloc fixé", "Roche en place"))
+
+# replace NAs by "0" for variables used in qecb determination
+
+bretagne_bm[, c(
+    "X..algues.brunes",
+    "Strate.algues.brunes",
+    "X..algues.rouges",
+    "Strate.algues.rouges",
+    "X..algues.vertes",
+    "Strate.algues.vertes",
+    "X..Cladophora",
+    "X..Lithophyllum",
+    "X..Recouvrement.Sediment", # is NA, then replace by 0 as well because no sense to have a NA value for "% recouvrement sédiment" as well.
+    #"Type.Sediment",
+    "X..Roche.Nue", # is NA, then replace by 0 as well because no sense to have a NA value for "% roche nue" as well.
+    "Nb.Littorina.obtusata",
+    "Nb.Gibbula.cineraria",
+    "Nb.Gibbula.pennanti",
+    "Nb.Gibbula.umbilicalis",
+    "Nb.Phallusia.mamillata",
+    "Nb.Tethya.aurantium",
+    #"Nb.Spirobranchus.lamarckii.1B",
+    #"Nb.Spirobranchus.lamarckii.2B",
+    #"Nb.Spirobranchus.lamarckii.3B",
+    #"Nb.Spirobranchus.lamarckii.4B",
+    #"Nb.Spirobranchus.lamarckii.5B",
+    "Nb.Spirobranchus.lamarckii.total",
+    #"Nb.spirorbis.1A",
+    #"Nb.spirorbis.2A",
+    #"Nb.spirorbis.3A",
+    #"Nb.spirorbis.4A",
+    #"Nb.spirorbis.5A",
+    "Nb.spirorbis.total",
+    #.."Nb.Crassostrea.gigas",
+    #.."Nb.Ostrea.edulis",
+    #.."X..Mytilus.sp.",
+    #.."X..Hermelles",
+    #.."X..Hydraires",
+    "X..Eponges",
+    "X..Ascidies.Coloniales",
+    "X..Ascidies.Solitaires",
+    "X..Bryozoaires.Dresses",
+    "X..Balanes.Vivantes",
+    #"Commentaires.Avant",
+    "X..Surface.Accolement", # is NA, then replace by 0 as well because no sense to have a NA value for "% surface accolement" as well.
+    #"Type.sustrat.observé",
+    #"Commentaires",
+    "Nb.Cancer.pagurus..Tourteau.",
+    "Nb.Necora.puber..Etrille.",
+    "Nb.Carcinus.maenas..Crabe.vert.",
+    "Nb.Nucella.lapilus..Pourpre.",
+    #.."Nb.Eriphia.verrucosa..Crabe.verruqueux.",
+    #.."Nb.Octopus.vulgaris..Poulpe.",
+    "Nb.Galathea..Galathées.",
+    #.."Nb.Paracentrotus.lividus..Oursin.",
+    "Nb.Lophozozymus.incisus..ancien.Xantho.incisus.",
+    "Nb.Palaemon.sp..Crevette.bouquet.ou.crevette.rose.",
+    "Nb.Haliotis.tuberculata..Ormeau.",
+    #"Nb.Stramonita.haemastoma..Pourpre.bouche.de.sang.",
+    "Nb.Littorina.littorea..Bigorneau.",
+    "Nb.Xantho.pilipes..Xanthe.poilu.",
+    "Nb.Mimachlamys.varia..Pétoncle.noir."
+  )
+  ] <- lapply(bretagne_bm[, c(
+    "X..algues.brunes",
+    "Strate.algues.brunes",
+    "X..algues.rouges",
+    "Strate.algues.rouges",
+    "X..algues.vertes",
+    "Strate.algues.vertes",
+    "X..Cladophora",
+    "X..Lithophyllum",
+    "X..Recouvrement.Sediment", # is NA, then replace by 0 as well because no sense to have a NA value for "% recouvrement sédiment" as well.
+    #"Type.Sediment",
+    "X..Roche.Nue", # is NA, then replace by 0 as well because no sense to have a NA value for "% roche nue" as well.
+    "Nb.Littorina.obtusata",
+    "Nb.Gibbula.cineraria",
+    "Nb.Gibbula.pennanti",
+    "Nb.Gibbula.umbilicalis",
+    "Nb.Phallusia.mamillata",
+    "Nb.Tethya.aurantium",
+    #"Nb.Spirobranchus.lamarckii.1B",
+    #"Nb.Spirobranchus.lamarckii.2B",
+    #"Nb.Spirobranchus.lamarckii.3B",
+    #"Nb.Spirobranchus.lamarckii.4B",
+    #"Nb.Spirobranchus.lamarckii.5B",
+    "Nb.Spirobranchus.lamarckii.total",
+    #"Nb.spirorbis.1A",
+    #"Nb.spirorbis.2A",
+    #"Nb.spirorbis.3A",
+    #"Nb.spirorbis.4A",
+    #"Nb.spirorbis.5A",
+    "Nb.spirorbis.total",
+    #.."Nb.Crassostrea.gigas",
+    #.."Nb.Ostrea.edulis",
+    #.."X..Mytilus.sp.",
+    #.."X..Hermelles",
+    #.."X..Hydraires",
+    "X..Eponges",
+    "X..Ascidies.Coloniales",
+    "X..Ascidies.Solitaires",
+    "X..Bryozoaires.Dresses",
+    "X..Balanes.Vivantes",
+    #"Commentaires.Avant",
+    "X..Surface.Accolement", # is NA, then replace by 0 as well because no sense to have a NA value for "% surface accolement" as well.
+    #"Type.sustrat.observé",
+    #"Commentaires",
+    "Nb.Cancer.pagurus..Tourteau.",
+    "Nb.Necora.puber..Etrille.",
+    "Nb.Carcinus.maenas..Crabe.vert.",
+    "Nb.Nucella.lapilus..Pourpre.",
+    #.."Nb.Eriphia.verrucosa..Crabe.verruqueux.",
+    #.."Nb.Octopus.vulgaris..Poulpe.",
+    "Nb.Galathea..Galathées.",
+    #.."Nb.Paracentrotus.lividus..Oursin.",
+    "Nb.Lophozozymus.incisus..ancien.Xantho.incisus.",
+    "Nb.Palaemon.sp..Crevette.bouquet.ou.crevette.rose.",
+    "Nb.Haliotis.tuberculata..Ormeau.",
+    #"Nb.Stramonita.haemastoma..Pourpre.bouche.de.sang.",
+    "Nb.Littorina.littorea..Bigorneau.",
+    "Nb.Xantho.pilipes..Xanthe.poilu.",
+    "Nb.Mimachlamys.varia..Pétoncle.noir."
+  )
+  ], function(x) replace(x, is.na(x), 0))
+
+
+  # bretagne_bf
+  bretagne_bf[, c(
+    "X..algues.brunes",
+    "Strate.algues.brunes",
+    "X..algues.rouges",
+    "Strate.algues.rouges",
+    "X..algues.vertes",
+    "Strate.algues.vertes",
+    "X..Cladophora",
+    "X..Lithophyllum",
+    "X..Recouvrement.Sediment", # is NA, then replace by 0 as well because no sense to have a NA value for "% recouvrement sédiment" as well.
+    #"Type.Sediment",
+    "X..Roche.Nue", # is NA, then replace by 0 as well because no sense to have a NA value for "% roche nue" as well.
+    "Nb.Littorina.obtusata",
+    "Nb.Gibbula.cineraria",
+    "Nb.Gibbula.pennanti",
+    "Nb.Gibbula.umbilicalis",
+    "Nb.Phallusia.mamillata",
+    "Nb.Tethya.aurantium",
+    #"Nb.Spirobranchus.lamarckii.1B",
+    #"Nb.Spirobranchus.lamarckii.2B",
+    #"Nb.Spirobranchus.lamarckii.3B",
+    #"Nb.Spirobranchus.lamarckii.4B",
+    #"Nb.Spirobranchus.lamarckii.5B",
+    "Nb.Spirobranchus.lamarckii.total",
+    #"Nb.spirorbis.1A",
+    #"Nb.spirorbis.2A",
+    #"Nb.spirorbis.3A",
+    #"Nb.spirorbis.4A",
+    #"Nb.spirorbis.5A",
+    "Nb.spirorbis.total",
+    #.."Nb.Crassostrea.gigas",
+    #.."Nb.Ostrea.edulis",
+    #.."X..Mytilus.sp.",
+    #.."X..Hermelles",
+    #.."X..Hydraires",
+    "X..Eponges",
+    "X..Ascidies.Coloniales",
+    "X..Ascidies.Solitaires",
+    "X..Bryozoaires.Dresses",
+    "X..Balanes.Vivantes",
+    #"Commentaires.Avant",
+    "X..Surface.Accolement"#, # is NA, then replace by 0 as well because no sense to have a NA value for "% surface accolement" as well.
+    #"Type.sustrat.observé",
+    #"Commentaires",
+    #."Nb.Cancer.pagurus..Tourteau.",
+    #.."Nb.Necora.puber..Etrille.",
+    #."Nb.Carcinus.maenas..Crabe.vert.",
+    #."Nb.Nucella.lapilus..Pourpre.",
+    #.."Nb.Eriphia.verrucosa..Crabe.verruqueux.",
+    #.."Nb.Octopus.vulgaris..Poulpe.",
+    #."Nb.Galathea..Galathées.",
+    #.."Nb.Paracentrotus.lividus..Oursin.",
+    #."Nb.Lophozozymus.incisus..ancien.Xantho.incisus.",
+    #."Nb.Palaemon.sp..Crevette.bouquet.ou.crevette.rose.",
+    #."Nb.Haliotis.tuberculata..Ormeau.",
+    #."Nb.Stramonita.haemastoma..Pourpre.bouche.de.sang.",
+    #."Nb.Littorina.littorea..Bigorneau.",
+    #."Nb.Xantho.pilipes..Xanthe.poilu.",
+    #."Nb.Mimachlamys.varia..Pétoncle.noir."
+  )
+  ] <- lapply(bretagne_bf[, c(
+    "X..algues.brunes",
+    "Strate.algues.brunes",
+    "X..algues.rouges",
+    "Strate.algues.rouges",
+    "X..algues.vertes",
+    "Strate.algues.vertes",
+    "X..Cladophora",
+    "X..Lithophyllum",
+    "X..Recouvrement.Sediment", # is NA, then replace by 0 as well because no sense to have a NA value for "% recouvrement sédiment" as well.
+    #"Type.Sediment",
+    "X..Roche.Nue", # is NA, then replace by 0 as well because no sense to have a NA value for "% roche nue" as well.
+    "Nb.Littorina.obtusata",
+    "Nb.Gibbula.cineraria",
+    "Nb.Gibbula.pennanti",
+    "Nb.Gibbula.umbilicalis",
+    "Nb.Phallusia.mamillata",
+    "Nb.Tethya.aurantium",
+    #"Nb.Spirobranchus.lamarckii.1B",
+    #"Nb.Spirobranchus.lamarckii.2B",
+    #"Nb.Spirobranchus.lamarckii.3B",
+    #"Nb.Spirobranchus.lamarckii.4B",
+    #"Nb.Spirobranchus.lamarckii.5B",
+    "Nb.Spirobranchus.lamarckii.total",
+    #"Nb.spirorbis.1A",
+    #"Nb.spirorbis.2A",
+    #"Nb.spirorbis.3A",
+    #"Nb.spirorbis.4A",
+    #"Nb.spirorbis.5A",
+    "Nb.spirorbis.total",
+    #.."Nb.Crassostrea.gigas",
+    #.."Nb.Ostrea.edulis",
+    #.."X..Mytilus.sp.",
+    #.."X..Hermelles",
+    #.."X..Hydraires",
+    "X..Eponges",
+    "X..Ascidies.Coloniales",
+    "X..Ascidies.Solitaires",
+    "X..Bryozoaires.Dresses",
+    "X..Balanes.Vivantes",
+    #"Commentaires.Avant",
+    "X..Surface.Accolement"#, # is NA, then replace by 0 as well because no sense to have a NA value for "% surface accolement" as well.
+    #"Type.sustrat.observé",
+    #"Commentaires",
+    #."Nb.Cancer.pagurus..Tourteau.",
+    #.."Nb.Necora.puber..Etrille.",
+    #."Nb.Carcinus.maenas..Crabe.vert.",
+    #."Nb.Nucella.lapilus..Pourpre.",
+    #.."Nb.Eriphia.verrucosa..Crabe.verruqueux.",
+    #.."Nb.Octopus.vulgaris..Poulpe.",
+    #."Nb.Galathea..Galathées.",
+    #.."Nb.Paracentrotus.lividus..Oursin.",
+    #."Nb.Lophozozymus.incisus..ancien.Xantho.incisus.",
+    #."Nb.Palaemon.sp..Crevette.bouquet.ou.crevette.rose.",
+    #."Nb.Haliotis.tuberculata..Ormeau.",
+    #."Nb.Stramonita.haemastoma..Pourpre.bouche.de.sang.",
+    #."Nb.Littorina.littorea..Bigorneau.",
+    #."Nb.Xantho.pilipes..Xanthe.poilu.",
+    #."Nb.Mimachlamys.varia..Pétoncle.noir."
+  )
+  ], function(x) replace(x, is.na(x), 0))
+
+
+  # egmp_basq_bm
+  egmp_basq_bm[, c(
+    "X..algues.brunes",
+    "Strate.algues.brunes",
+    "X..algues.rouges",
+    "Strate.algues.rouges",
+    "X..algues.vertes",
+    "Strate.algues.vertes",
+    "X..Cladophora",
+    "X..Lithophyllum",
+    "X..Recouvrement.Sediment", # is NA, then replace by 0 as well because no sense to have a NA value for "% recouvrement sédiment" as well.
+    #"Type.Sediment",
+    "X..Roche.Nue", # is NA, then replace by 0 as well because no sense to have a NA value for "% roche nue" as well.
+    "Nb.Littorina.obtusata",
+    "Nb.Gibbula.cineraria",
+    "Nb.Gibbula.pennanti",
+    "Nb.Gibbula.umbilicalis",
+    "Nb.Phallusia.mamillata",
+    "Nb.Tethya.aurantium",
+    #"Nb.Spirobranchus.lamarckii.1B",
+    #"Nb.Spirobranchus.lamarckii.2B",
+    #"Nb.Spirobranchus.lamarckii.3B",
+    #"Nb.Spirobranchus.lamarckii.4B",
+    #"Nb.Spirobranchus.lamarckii.5B",
+    "Nb.Spirobranchus.lamarckii.total",
+    #"Nb.spirorbis.1A",
+    #"Nb.spirorbis.2A",
+    #"Nb.spirorbis.3A",
+    #"Nb.spirorbis.4A",
+    #"Nb.spirorbis.5A",
+    "Nb.spirorbis.total",
+    "Nb.Crassostrea.gigas",
+    "Nb.Ostrea.edulis",
+    "X..Mytilus.sp.",
+    "X..Hermelles",
+    "X..Hydraires",
+    "X..Eponges",
+    "X..Ascidies.Coloniales",
+    "X..Ascidies.Solitaires",
+    "X..Bryozoaires.Dresses",
+    "X..Balanes.Vivantes",
+    #"Commentaires.Avant",
+    "X..Surface.Accolement", # is NA, then replace by 0 as well because no sense to have a NA value for "% surface accolement" as well.
+    #"Type.sustrat.observé",
+    #"Commentaires",
+    "Nb.Cancer.pagurus..Tourteau.",
+    "Nb.Necora.puber..Etrille.",
+    "Nb.Carcinus.maenas..Crabe.vert.",
+    "Nb.Nucella.lapilus..Pourpre.",
+    "Nb.Eriphia.verrucosa..Crabe.verruqueux.",
+    "Nb.Octopus.vulgaris..Poulpe.",
+    "Nb.Galathea..Galathées.",
+    "Nb.Paracentrotus.lividus..Oursin.",
+    "Nb.Lophozozymus.incisus..ancien.Xantho.incisus.",
+    "Nb.Palaemon.sp..Crevette.bouquet.ou.crevette.rose.",
+    "Nb.Haliotis.tuberculata..Ormeau.",
+    "Nb.Stramonita.haemastoma..Pourpre.bouche.de.sang.",
+    "Nb.Littorina.littorea..Bigorneau.",
+    "Nb.Xantho.pilipes..Xanthe.poilu.",
+    "Nb.Mimachlamys.varia..Pétoncle.noir."
+  )
+  ] <- lapply(egmp_basq_bm[, c(
+    "X..algues.brunes",
+    "Strate.algues.brunes",
+    "X..algues.rouges",
+    "Strate.algues.rouges",
+    "X..algues.vertes",
+    "Strate.algues.vertes",
+    "X..Cladophora",
+    "X..Lithophyllum",
+    "X..Recouvrement.Sediment", # is NA, then replace by 0 as well because no sense to have a NA value for "% recouvrement sédiment" as well.
+    #"Type.Sediment",
+    "X..Roche.Nue", # is NA, then replace by 0 as well because no sense to have a NA value for "% roche nue" as well.
+    "Nb.Littorina.obtusata",
+    "Nb.Gibbula.cineraria",
+    "Nb.Gibbula.pennanti",
+    "Nb.Gibbula.umbilicalis",
+    "Nb.Phallusia.mamillata",
+    "Nb.Tethya.aurantium",
+    #"Nb.Spirobranchus.lamarckii.1B",
+    #"Nb.Spirobranchus.lamarckii.2B",
+    #"Nb.Spirobranchus.lamarckii.3B",
+    #"Nb.Spirobranchus.lamarckii.4B",
+    #"Nb.Spirobranchus.lamarckii.5B",
+    "Nb.Spirobranchus.lamarckii.total",
+    #"Nb.spirorbis.1A",
+    #"Nb.spirorbis.2A",
+    #"Nb.spirorbis.3A",
+    #"Nb.spirorbis.4A",
+    #"Nb.spirorbis.5A",
+    "Nb.spirorbis.total",
+    "Nb.Crassostrea.gigas",
+    "Nb.Ostrea.edulis",
+    "X..Mytilus.sp.",
+    "X..Hermelles",
+    "X..Hydraires",
+    "X..Eponges",
+    "X..Ascidies.Coloniales",
+    "X..Ascidies.Solitaires",
+    "X..Bryozoaires.Dresses",
+    "X..Balanes.Vivantes",
+    #"Commentaires.Avant",
+    "X..Surface.Accolement", # is NA, then replace by 0 as well because no sense to have a NA value for "% surface accolement" as well.
+    #"Type.sustrat.observé",
+    #"Commentaires",
+    "Nb.Cancer.pagurus..Tourteau.",
+    "Nb.Necora.puber..Etrille.",
+    "Nb.Carcinus.maenas..Crabe.vert.",
+    "Nb.Nucella.lapilus..Pourpre.",
+    "Nb.Eriphia.verrucosa..Crabe.verruqueux.",
+    "Nb.Octopus.vulgaris..Poulpe.",
+    "Nb.Galathea..Galathées.",
+    "Nb.Paracentrotus.lividus..Oursin.",
+    "Nb.Lophozozymus.incisus..ancien.Xantho.incisus.",
+    "Nb.Palaemon.sp..Crevette.bouquet.ou.crevette.rose.",
+    "Nb.Haliotis.tuberculata..Ormeau.",
+    "Nb.Stramonita.haemastoma..Pourpre.bouche.de.sang.",
+    "Nb.Littorina.littorea..Bigorneau.",
+    "Nb.Xantho.pilipes..Xanthe.poilu.",
+    "Nb.Mimachlamys.varia..Pétoncle.noir."
+  )
+  ], function(x) replace(x, is.na(x), 0))
+
+
+  # egmp_basq_bf
+  egmp_basq_bf[, c(
+    "X..algues.brunes",
+    "Strate.algues.brunes",
+    "X..algues.rouges",
+    "Strate.algues.rouges",
+    "X..algues.vertes",
+    "Strate.algues.vertes",
+    "X..Cladophora",
+    "X..Lithophyllum",
+    "X..Recouvrement.Sediment", # is NA, then replace by 0 as well because no sense to have a NA value for "% recouvrement sédiment" as well.
+    #"Type.Sediment",
+    "X..Roche.Nue", # is NA, then replace by 0 as well because no sense to have a NA value for "% roche nue" as well.
+    "Nb.Littorina.obtusata",
+    "Nb.Gibbula.cineraria",
+    "Nb.Gibbula.pennanti",
+    "Nb.Gibbula.umbilicalis",
+    "Nb.Phallusia.mamillata",
+    "Nb.Tethya.aurantium",
+    #"Nb.Spirobranchus.lamarckii.1B",
+    #"Nb.Spirobranchus.lamarckii.2B",
+    #"Nb.Spirobranchus.lamarckii.3B",
+    #"Nb.Spirobranchus.lamarckii.4B",
+    #"Nb.Spirobranchus.lamarckii.5B",
+    "Nb.Spirobranchus.lamarckii.total",
+    #"Nb.spirorbis.1A",
+    #"Nb.spirorbis.2A",
+    #"Nb.spirorbis.3A",
+    #"Nb.spirorbis.4A",
+    #"Nb.spirorbis.5A",
+    "Nb.spirorbis.total",
+    "Nb.Crassostrea.gigas",
+    "Nb.Ostrea.edulis",
+    "X..Mytilus.sp.",
+    "X..Hermelles",
+    "X..Hydraires",
+    "X..Eponges",
+    "X..Ascidies.Coloniales",
+    "X..Ascidies.Solitaires",
+    "X..Bryozoaires.Dresses",
+    "X..Balanes.Vivantes",
+    #"Commentaires.Avant",
+    "X..Surface.Accolement"#, # is NA, then replace by 0 as well because no sense to have a NA value for "% surface accolement" as well.
+    #"Type.sustrat.observé",
+    #"Commentaires",
+    #."Nb.Cancer.pagurus..Tourteau.",
+    #.."Nb.Necora.puber..Etrille.",
+    #."Nb.Carcinus.maenas..Crabe.vert.",
+    #."Nb.Nucella.lapilus..Pourpre.",
+    #.."Nb.Eriphia.verrucosa..Crabe.verruqueux.",
+    #.."Nb.Octopus.vulgaris..Poulpe.",
+    #."Nb.Galathea..Galathées.",
+    #.."Nb.Paracentrotus.lividus..Oursin.",
+    #."Nb.Lophozozymus.incisus..ancien.Xantho.incisus.",
+    #."Nb.Palaemon.sp..Crevette.bouquet.ou.crevette.rose.",
+    #."Nb.Haliotis.tuberculata..Ormeau.",
+    #."Nb.Stramonita.haemastoma..Pourpre.bouche.de.sang.",
+    #."Nb.Littorina.littorea..Bigorneau.",
+    #."Nb.Xantho.pilipes..Xanthe.poilu.",
+    #."Nb.Mimachlamys.varia..Pétoncle.noir."
+  )
+  ] <- lapply(egmp_basq_bf[, c(
+    "X..algues.brunes",
+    "Strate.algues.brunes",
+    "X..algues.rouges",
+    "Strate.algues.rouges",
+    "X..algues.vertes",
+    "Strate.algues.vertes",
+    "X..Cladophora",
+    "X..Lithophyllum",
+    "X..Recouvrement.Sediment", # is NA, then replace by 0 as well because no sense to have a NA value for "% recouvrement sédiment" as well.
+    #"Type.Sediment",
+    "X..Roche.Nue", # is NA, then replace by 0 as well because no sense to have a NA value for "% roche nue" as well.
+    "Nb.Littorina.obtusata",
+    "Nb.Gibbula.cineraria",
+    "Nb.Gibbula.pennanti",
+    "Nb.Gibbula.umbilicalis",
+    "Nb.Phallusia.mamillata",
+    "Nb.Tethya.aurantium",
+    #"Nb.Spirobranchus.lamarckii.1B",
+    #"Nb.Spirobranchus.lamarckii.2B",
+    #"Nb.Spirobranchus.lamarckii.3B",
+    #"Nb.Spirobranchus.lamarckii.4B",
+    #"Nb.Spirobranchus.lamarckii.5B",
+    "Nb.Spirobranchus.lamarckii.total",
+    #"Nb.spirorbis.1A",
+    #"Nb.spirorbis.2A",
+    #"Nb.spirorbis.3A",
+    #"Nb.spirorbis.4A",
+    #"Nb.spirorbis.5A",
+    "Nb.spirorbis.total",
+    "Nb.Crassostrea.gigas",
+    "Nb.Ostrea.edulis",
+    "X..Mytilus.sp.",
+    "X..Hermelles",
+    "X..Hydraires",
+    "X..Eponges",
+    "X..Ascidies.Coloniales",
+    "X..Ascidies.Solitaires",
+    "X..Bryozoaires.Dresses",
+    "X..Balanes.Vivantes",
+    #"Commentaires.Avant",
+    "X..Surface.Accolement"#, # is NA, then replace by 0 as well because no sense to have a NA value for "% surface accolement" as well.
+    #"Type.sustrat.observé",
+    #"Commentaires",
+    #."Nb.Cancer.pagurus..Tourteau.",
+    #.."Nb.Necora.puber..Etrille.",
+    #."Nb.Carcinus.maenas..Crabe.vert.",
+    #."Nb.Nucella.lapilus..Pourpre.",
+    #.."Nb.Eriphia.verrucosa..Crabe.verruqueux.",
+    #.."Nb.Octopus.vulgaris..Poulpe.",
+    #."Nb.Galathea..Galathées.",
+    #.."Nb.Paracentrotus.lividus..Oursin.",
+    #."Nb.Lophozozymus.incisus..ancien.Xantho.incisus.",
+    #."Nb.Palaemon.sp..Crevette.bouquet.ou.crevette.rose.",
+    #."Nb.Haliotis.tuberculata..Ormeau.",
+    #."Nb.Stramonita.haemastoma..Pourpre.bouche.de.sang.",
+    #."Nb.Littorina.littorea..Bigorneau.",
+    #."Nb.Xantho.pilipes..Xanthe.poilu.",
+    #."Nb.Mimachlamys.varia..Pétoncle.noir."
+  )
+  ], function(x) replace(x, is.na(x), 0))
+
+
+# merge dfs.
+qecbnato0 <- dplyr::bind_rows(bretagne_bm, bretagne_bf)
+qecbnato0 <- dplyr::bind_rows(qecbnato0, egmp_basq_bm)
+qecbnato0 <- dplyr::bind_rows(qecbnato0, egmp_basq_bf)
+
+qecbnato0 <- dplyr::arrange(qecbnato0, region, site_year_month_day, Type.Bloc, Numéro.Bloc.échantillon, Face)
+
+rm(bretagne_bm, bretagne_bf, egmp_basq_bm, egmp_basq_bf)
+
+
+## analyse matricielle
+
+# NB some variables were dplyr::renamed or created, cfr I originally merged qecb and ivr data in below script to do some correlation analysis. This is not the case anymore, so no more merging anymore.
+
+qecbnato0 <- tibble::add_column(qecbnato0, region.site_year_month_day = paste0(qecbnato0$region, qecbnato0$site_year_month_day), .before = "region")
+
+
+numero_quadrat <- stringr::str_sub(qecbnato0$quadrat_bis, start = -1)
+qecbnato0 <- tibble::add_column(qecbnato0, numero_quadrat, .after = "quadrat_bis")
+rm(numero_quadrat)
+qecbnato0$numero_quadrat <- as.integer(qecbnato0$numero_quadrat)
+
+
+qecbnato0$Year <- as.integer(qecbnato0$Year)
+qecbnato0$Month <- as.integer(qecbnato0$Month)
+qecbnato0$Day <- as.integer(qecbnato0$Day)
+
+############################################################
+#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+# Anna still hasn't corrected for boulder nb in FINS_Quemenes.2020.10.16 data encoding ! removed from the df_
+qecbnato0 <- qecbnato0 %>% dplyr::filter(site_year_month_day != "FINS_Quemenes.2020.10.16")
+############################################################
+
+# what to do with spirorbes & Nb.Spirobranchus.lamarckii.total? log10 transformation
+
+qecbnato0 <- tibble::add_column(qecbnato0, log10.Nb.spirorbis.total = log10(qecbnato0$Nb.spirorbis.total + 1), .after = "Nb.spirorbis.total")
+qecbnato0 <- tibble::add_column(qecbnato0, log10.Nb.Spirobranchus.lamarckii.total = log10(qecbnato0$Nb.Spirobranchus.lamarckii.total + 1), .after = "Nb.Spirobranchus.lamarckii.total")
+
+saveRDS(qecbnato0, "qecbnato0.RDS")
+
+
+###############################################################
+#                                                             #
+#   Start dissimilarity calculation with some data handling   #
+#                                                             #
+###############################################################
+
+# first, create vector (4) for qecb and fishing by region (same as above)
+
+bret_egmp_basq_qecb <- c(
+  "X..algues.brunes",
+  "X..algues.rouges",
+  "X..algues.vertes",
+  "X..Cladophora",
+  "X..Lithophyllum",
+  "Nb.Littorina.obtusata",
+  "Nb.Gibbula.cineraria",
+  "Nb.Gibbula.pennanti",
+  "Nb.Gibbula.umbilicalis",
+  "Nb.Phallusia.mamillata",
+  "Nb.Tethya.aurantium",
+  "Nb.Spirobranchus.lamarckii.total",
+  "Nb.spirorbis.total",
+  "X..Eponges",
+  "X..Ascidies.Coloniales",
+  "X..Ascidies.Solitaires",
+  "X..Bryozoaires.Dresses",
+  "X..Balanes.Vivantes"
+  #, "X..Recouvrement.Sediment"
+  #, "X..Roche.Nue"
+  #, "X..Surface.Accolement"
+  )
+
+egmp_basq_qecb <- c("Nb.Crassostrea.gigas", "Nb.Ostrea.edulis", "X..Mytilus.sp.", "X..Hermelles", "X..Hydraires")
+
+bret_egmp_basq_fishing <- c("Nb.Cancer.pagurus..Tourteau.",
+                            "Nb.Necora.puber..Etrille.",
+                            "Nb.Carcinus.maenas..Crabe.vert.",
+                            "Nb.Nucella.lapilus..Pourpre.",
+                            "Nb.Galathea..Galathées.",
+                            "Nb.Lophozozymus.incisus..ancien.Xantho.incisus.",
+                            "Nb.Palaemon.sp..Crevette.bouquet.ou.crevette.rose.",
+                            "Nb.Haliotis.tuberculata..Ormeau.",
+                            "Nb.Littorina.littorea..Bigorneau.",
+                            "Nb.Xantho.pilipes..Xanthe.poilu.",
+                            "Nb.Mimachlamys.varia..Pétoncle.noir.")
+
+egmp_basq_fishing <- c("Nb.Eriphia.verrucosa..Crabe.verruqueux.", "Nb.Octopus.vulgaris..Poulpe.", "Nb.Paracentrotus.lividus..Oursin.", "Nb.Stramonita.haemastoma..Pourpre.bouche.de.sang.")
+
+# here I can choose to either replace spirorbis and/or spirobranchus by their log10 transformation in bret_egmp_basq_qecb vector
+bret_egmp_basq_qecb <- replace(bret_egmp_basq_qecb, bret_egmp_basq_qecb == "Nb.spirorbis.total", "log10.Nb.spirorbis.total")
+saveRDS(bret_egmp_basq_qecb, "bret_egmp_basq_qecb.RDS")
+
+
+#############################################################
+#                                                           #
+#                  Compute dissimilarity                    #
+#                                                           #
+#############################################################
+### determination of coefficient of dissimilarity face sup mobile bloc vs fixed bloc
+
+# loop in a fct
+
+matri_fct_bmf <- function(data, conca) {
+
+  matri_df <- data
+
+  for (x in c(1:length(unique(matri_df$site_year_month_day)))) {
+
+    qecbnato0_x <- matri_df %>% dplyr::filter(site_year_month_day == unique(matri_df$site_year_month_day)[[x]])
+
+    rownames(qecbnato0_x) <- paste0(qecbnato0_x$Type.Bloc, "_", qecbnato0_x$Face,  "_", qecbnato0_x$Numéro.Bloc.échantillon, "_", qecbnato0_x$quadrat_bis)
+
+
+  mtxdis <- vegan::vegdist(
+    sqrt(qecbnato0_x[, conca]), #Transform your species abundance data_ Typically, raw abundances are transformed prior to analysis. Usually you will use square root, fourth-root, log(X+1), or presence-absence (square root being least extreme, P/A being most). I would start with square root. (https://stats.stackexchange.com/questions/234495/double-zeroes-problem-with-euclidean-distance-and-abundance-data-is-the-proble)
+
+    na.rm = TRUE,
+    method = "bray" #Construct species abundance dissimilarity matrices with Bray-Curtis. If your data contains samples that are all-zero you will run into the double zero problem. This can be overcome by using a zero-adjusted Bray-Curtis coefficient, which is sometimes referred to as a 'dummy variable' which damps down the similarity fluctuations between samples that are both zero (undefined). => see below for zero-adjusted Bray-Curtis coefficient ; #another possibility, sqrt + 1 ??
+  )
+
+
+ #https://rdrr.io/github/phytomosaic/ecole/man/bray0.html
+ # mtxdis <- ecole::bray0(
+ #   sqrt
+  #  (qecbnato0_x[,conca]), na.rm = TRUE)
+
+  expand.grid(mtxdis)
+
+  mtxdisdf_ <- as.data.frame(as.matrix(mtxdis))
+
+  a_ <- NA
+  b_ <- NA
+  c_ <- NA
+  d_ <- NA
+  e_ <- NA
+  f_ <- NA
+  g_ <- NA
+  h_ <- NA
+  i_ <- NA
+  j_ <- NA
+  k_ <- NA
+  l_ <- NA
+  m_ <- NA
+  n_ <- NA
+
+  for (z in c(1:nrow(mtxdisdf_))) {
+
+    a_[[z]] <- (paste0(rownames(mtxdisdf_[z + 1, ]), " & ", ifelse(nrow(mtxdisdf_) >= 1, colnames(mtxdisdf_[1]), NA)))
+    b_[[z]] <- (paste0(rownames(mtxdisdf_[z + 2, ]), " & ", ifelse(nrow(mtxdisdf_) >= 2, colnames(mtxdisdf_[2]), NA)))
+    c_[[z]] <- (paste0(rownames(mtxdisdf_[z + 3, ]), " & ", ifelse(nrow(mtxdisdf_) >= 3, colnames(mtxdisdf_[3]), NA)))
+    d_[[z]] <- (paste0(rownames(mtxdisdf_[z + 4, ]), " & ", ifelse(nrow(mtxdisdf_) >= 4, colnames(mtxdisdf_[4]), NA)))
+    e_[[z]] <- (paste0(rownames(mtxdisdf_[z + 5, ]), " & ", ifelse(nrow(mtxdisdf_) >= 5, colnames(mtxdisdf_[5]), NA)))
+    f_[[z]] <- (paste0(rownames(mtxdisdf_[z + 6, ]), " & ", ifelse(nrow(mtxdisdf_) >= 6, colnames(mtxdisdf_[6]), NA)))
+    g_[[z]] <- (paste0(rownames(mtxdisdf_[z + 7, ]), " & ", ifelse(nrow(mtxdisdf_) >= 7, colnames(mtxdisdf_[7]), NA)))
+    h_[[z]] <- (paste0(rownames(mtxdisdf_[z + 8, ]), " & ", ifelse(nrow(mtxdisdf_) >= 8, colnames(mtxdisdf_[8]), NA)))
+    i_[[z]] <- (paste0(rownames(mtxdisdf_[z + 9, ]), " & ", ifelse(nrow(mtxdisdf_) >= 9, colnames(mtxdisdf_[9]), NA)))
+    j_[[z]] <- (paste0(rownames(mtxdisdf_[z + 10, ]), " & ",  ifelse(nrow(mtxdisdf_) >= 10, colnames(mtxdisdf_[10]), NA)))
+    k_[[z]] <- (paste0(rownames(mtxdisdf_[z + 11, ]), " & ",  ifelse(nrow(mtxdisdf_) >= 11, colnames(mtxdisdf_[11]), NA)))
+    l_[[z]] <- (paste0(rownames(mtxdisdf_[z + 12, ]), " & ",  ifelse(nrow(mtxdisdf_) >= 12, colnames(mtxdisdf_[12]), NA)))
+    m_[[z]] <- (paste0(rownames(mtxdisdf_[z + 13, ]), " & ", ifelse(nrow(mtxdisdf_) >= 13, colnames(mtxdisdf_[13]), NA)))
+    n_[[z]] <- (paste0(rownames(mtxdisdf_[z + 14, ]), " & ", ifelse(nrow(mtxdisdf_) >= 14, colnames(mtxdisdf_[14]), NA)))
+
+  }
+
+  rm(z)
+
+  y <- length(a_) - (ifelse(nrow(mtxdisdf_) >= 1, 1, nrow(mtxdisdf_)))
+  a_ <- a_[1:y]
+  y <- length(b_) - (ifelse(nrow(mtxdisdf_) >= 2, 2, nrow(mtxdisdf_)))
+  b_ <- b_[1:y]
+  y <- length(c_) - (ifelse(nrow(mtxdisdf_) >= 3, 3, nrow(mtxdisdf_)))
+  c_ <- c_[1:y]
+  y <- length(d_) - (ifelse(nrow(mtxdisdf_) >= 4, 4, nrow(mtxdisdf_)))
+  d_ <- d_[1:y]
+  y <- length(e_) - (ifelse(nrow(mtxdisdf_) >= 5, 5, nrow(mtxdisdf_)))
+  e_ <- e_[1:y]
+  y <- length(f_) - (ifelse(nrow(mtxdisdf_) >= 6, 6, nrow(mtxdisdf_)))
+  f_ <- f_[1:y]
+  y <- length(g_) - (ifelse(nrow(mtxdisdf_) >= 7, 7, nrow(mtxdisdf_)))
+  g_ <- g_[1:y]
+  y <- length(h_) - (ifelse(nrow(mtxdisdf_) >= 8, 8, nrow(mtxdisdf_)))
+  h_ <- h_[1:y]
+  y <- length(i_) - (ifelse(nrow(mtxdisdf_) >= 9, 9, nrow(mtxdisdf_)))
+  i_ <- i_[1:y]
+  y <- length(j_) - (ifelse(nrow(mtxdisdf_) >= 10, 10, nrow(mtxdisdf_)))
+  j_ <- j_[1:y]
+  y <- length(k_) - (ifelse(nrow(mtxdisdf_) >= 11, 11, nrow(mtxdisdf_)))
+  k_ <- k_[1:y]
+  y <- length(l_) - (ifelse(nrow(mtxdisdf_) >= 12, 12, nrow(mtxdisdf_)))
+  l_ <- l_[1:y]
+  y <- length(m_) - (ifelse(nrow(mtxdisdf_) >= 13, 13, nrow(mtxdisdf_)))
+  m_ <- m_[1:y]
+  y <- length(n_) - (ifelse(nrow(mtxdisdf_) >= 14, 14, nrow(mtxdisdf_)))
+  n_ <- n_[1:y]
+
+  rm(y)
+
+  name_ <- c(a_, b_, c_, d_, e_, f_, g_, h_, i_, j_, k_, l_, m_, n_)
+  df_ <- data.frame(expand.grid(mtxdis), name_[1:nrow(expand.grid(mtxdis))])
+  names(df_) <- c("dist.", "name_")
+
+  rm(a_, b_, c_, d_, e_, f_, g_, h_, i_, j_, k_, l_, m_, n_)
+  rm(name_)
+
+  q_ <- strsplit(df_$name_, " & ")
+  mat_  <- matrix(unlist(q_), ncol = 2, byrow = TRUE)
+  q_df_   <- as.data.frame(matrix(unlist(q_), ncol = 2, byrow = TRUE))
+  df_ <- dplyr::bind_cols(df_, q_df_)
+
+  rm(q_, mat_, q_df_)
+
+  split_ <- strsplit(df_$V1, "_")
+  v1_split_ <- as.data.frame(matrix(unlist(split_), ncol = 4, byrow = TRUE))
+  split_ <- strsplit(df_$V2, "_")
+  v2_split_ <- as.data.frame(matrix(unlist(split_), ncol = 4, byrow = TRUE))
+
+  df_ <- dplyr::bind_cols(df_, v1_split_)
+  df_ <- dplyr::bind_cols(df_, v2_split_)
+  df_red_ <- subset(df_, V4...8 == V4...12 & V1...5 != V1...9)
+  site_year_month_day <- rep(unique(qecbnato0_x$site_year_month_day), nrow(df_red_))
+
+  df_red_ <- tibble::add_column(df_red_, site_year_month_day, .before = "dist.")
+
+  rm(split_, v1_split_, v2_split_)
+  rm(mtxdis, mtxdisdf_, df_, site_year_month_day)
+
+  matri_list[[x]] <- df_red_
+  matri_list <<- matri_list
+
+  rm(df_red_, qecbnato0_x, x)
+
+  }
+
+  matri_df <- do.call("rbind", matri_list)
+
+  names(matri_df) <- c("site_year_month_day", "dist.", "name_", "name_left", "name_right", "Type.Bloc.left", "Face.left", "Numéro.Bloc.échantillon.left", "Quadrat.left", "Type.Bloc.right", "Face.right", "Numéro.Bloc.échantillon.right", "Quadrat.right")
+
+  matri_df <<- matri_df
+
+  hist(matri_df$dist.)
+
+}
+
+data_ <- dplyr::filter(qecbnato0, Face == "face supérieure")
+data_$Type.Bloc <- ifelse(as.character(data_$Type.Bloc) == "Roche en place", "Bloc fixé", as.character(data_$Type.Bloc))
+matri_list <- vector("list", length(unique(data_$site_year_month_day)))
+
+matri_fct_bmf(data = data_, conca = c(bret_egmp_basq_qecb, egmp_basq_qecb))
+hist(matri_df$dist., main = c(paste("Histo. of Bray (0-adjusted) dist. dissimilarity measures"), paste(" (sqrt transfo) - BMfs vs BF -")))
+
+matri_full_bm_bf_fs <- matri_df
+
+
+rm(data_, matri_df, matri_list)
+
+
+### determination of coefficient of dissimilarity between blocs mobiles face sup vs face inf.
+
+# loop in a fct
+
+matri_fct_bmm <- function(data, conca) {
+
+  matri_df <- data
+
+  for (x in c(1:length(unique(matri_df$site_year_month_day)))) {
+
+    qecbnato0_x <- matri_df %>% dplyr::filter(site_year_month_day == unique(matri_df$site_year_month_day)[[x]])
+
+    rownames(qecbnato0_x) <- paste0(qecbnato0_x$Type.Bloc, "_", qecbnato0_x$Face,  "_", qecbnato0_x$Numéro.Bloc.échantillon, "_", qecbnato0_x$quadrat_bis)
+
+
+  mtxdis <- vegan::vegdist(
+  sqrt(qecbnato0_x[, c(bret_egmp_basq_qecb)]), #Transform your species abundance data_ Typically, raw abundances are transformed prior to analysis. Usually you will use square root, fourth-root, log(X+1), or presence-absence (square root being least extreme, P/A being most). I would start with square root. (https://stats.stackexchange.com/questions/234495/double-zeroes-problem-with-euclidean-distance-and-abundance-data-is-the-proble)
+  na.rm = TRUE,
+  method = "bray" #Construct species abundance dissimilarity matrices with Bray-Curtis. If your data contains samples that are all-zero you will run into the double zero problem. This can be overcome by using a zero-adjusted Bray-Curtis coefficient, which is sometimes referred to as a 'dummy variable' which damps down the similarity fluctuations between samples that are both zero (undefined). => see below for zero-adjusted Bray-Curtis coefficient ; #another possibility, sqrt + 1 ??
+  )
+
+
+  #mtxdis <- ecole::bray0(
+   # sqrt(qecbnato0_x[, conca]), na.rm = TRUE)
+
+
+  expand.grid(mtxdis)
+
+  mtxdisdf_ <- as.data.frame(as.matrix(mtxdis))
+
+  a_ <- NA
+  b_ <- NA
+  c_ <- NA
+  d_ <- NA
+  e_ <- NA
+  f_ <- NA
+  g_ <- NA
+  h_ <- NA
+  i_ <- NA
+  j_ <- NA
+  k_ <- NA
+  l_ <- NA
+  m_ <- NA
+  n_ <- NA
+  o_ <- NA
+  p_ <- NA
+  q_ <- NA
+  r_ <- NA
+  s_ <- NA
+
+  for (z in c(1:nrow(mtxdisdf_))) {
+
+    a_[[z]] <- (paste0(rownames(mtxdisdf_[z + 1, ]), " & ", ifelse(nrow(mtxdisdf_) >= 1, colnames(mtxdisdf_[1]), NA)))
+    b_[[z]] <- (paste0(rownames(mtxdisdf_[z + 2, ]), " & ", ifelse(nrow(mtxdisdf_) >= 2, colnames(mtxdisdf_[2]), NA)))
+    c_[[z]] <- (paste0(rownames(mtxdisdf_[z + 3, ]), " & ", ifelse(nrow(mtxdisdf_) >= 3, colnames(mtxdisdf_[3]), NA)))
+    d_[[z]] <- (paste0(rownames(mtxdisdf_[z + 4, ]), " & ", ifelse(nrow(mtxdisdf_) >= 4, colnames(mtxdisdf_[4]), NA)))
+    e_[[z]] <- (paste0(rownames(mtxdisdf_[z + 5, ]), " & ", ifelse(nrow(mtxdisdf_) >= 5, colnames(mtxdisdf_[5]), NA)))
+    f_[[z]] <- (paste0(rownames(mtxdisdf_[z + 6, ]), " & ", ifelse(nrow(mtxdisdf_) >= 6, colnames(mtxdisdf_[6]), NA)))
+    g_[[z]] <- (paste0(rownames(mtxdisdf_[z + 7, ]), " & ", ifelse(nrow(mtxdisdf_) >= 7, colnames(mtxdisdf_[7]), NA)))
+    h_[[z]] <- (paste0(rownames(mtxdisdf_[z + 8, ]), " & ", ifelse(nrow(mtxdisdf_) >= 8, colnames(mtxdisdf_[8]), NA)))
+    i_[[z]] <- (paste0(rownames(mtxdisdf_[z + 9, ]), " & ", ifelse(nrow(mtxdisdf_) >= 9, colnames(mtxdisdf_[9]), NA)))
+    j_[[z]] <- (paste0(rownames(mtxdisdf_[z + 10, ]), " & ",  ifelse(nrow(mtxdisdf_) >= 10, colnames(mtxdisdf_[10]), NA)))
+    k_[[z]] <- (paste0(rownames(mtxdisdf_[z + 11, ]), " & ",  ifelse(nrow(mtxdisdf_) >= 11, colnames(mtxdisdf_[11]), NA)))
+    l_[[z]] <- (paste0(rownames(mtxdisdf_[z + 12, ]), " & ",  ifelse(nrow(mtxdisdf_) >= 12, colnames(mtxdisdf_[12]), NA)))
+    m_[[z]] <- (paste0(rownames(mtxdisdf_[z + 13, ]), " & ", ifelse(nrow(mtxdisdf_) >= 13, colnames(mtxdisdf_[13]), NA)))
+    n_[[z]] <- (paste0(rownames(mtxdisdf_[z + 14, ]), " & ", ifelse(nrow(mtxdisdf_) >= 14, colnames(mtxdisdf_[14]), NA)))
+    o_[[z]] <- (paste0(rownames(mtxdisdf_[z + 15, ]), " & ", ifelse(nrow(mtxdisdf_) >= 15, colnames(mtxdisdf_[15]), NA)))
+    p_[[z]] <- (paste0(rownames(mtxdisdf_[z + 16, ]), " & ", ifelse(nrow(mtxdisdf_) >= 16, colnames(mtxdisdf_[16]), NA)))
+    q_[[z]] <- (paste0(rownames(mtxdisdf_[z + 17, ]), " & ", ifelse(nrow(mtxdisdf_) >= 17, colnames(mtxdisdf_[17]), NA)))
+    r_[[z]] <- (paste0(rownames(mtxdisdf_[z + 18, ]), " & ", ifelse(nrow(mtxdisdf_) >= 18, colnames(mtxdisdf_[18]), NA)))
+    s_[[z]] <- (paste0(rownames(mtxdisdf_[z + 19, ]), " & ", ifelse(nrow(mtxdisdf_) >= 19, colnames(mtxdisdf_[19]), NA)))
+
+  }
+
+  rm(z)
+
+  y <- length(a_) - (ifelse(nrow(mtxdisdf_) >= 1, 1, nrow(mtxdisdf_)))
+  a_ <- a_[1:y]
+  y <- length(b_) - (ifelse(nrow(mtxdisdf_) >= 2, 2, nrow(mtxdisdf_)))
+  b_ <- b_[1:y]
+  y <- length(c_) - (ifelse(nrow(mtxdisdf_) >= 3, 3, nrow(mtxdisdf_)))
+  c_ <- c_[1:y]
+  y <- length(d_) - (ifelse(nrow(mtxdisdf_) >= 4, 4, nrow(mtxdisdf_)))
+  d_ <- d_[1:y]
+  y <- length(e_) - (ifelse(nrow(mtxdisdf_) >= 5, 5, nrow(mtxdisdf_)))
+  e_ <- e_[1:y]
+  y <- length(f_) - (ifelse(nrow(mtxdisdf_) >= 6, 6, nrow(mtxdisdf_)))
+  f_ <- f_[1:y]
+  y <- length(g_) - (ifelse(nrow(mtxdisdf_) >= 7, 7, nrow(mtxdisdf_)))
+  g_ <- g_[1:y]
+  y <- length(h_) - (ifelse(nrow(mtxdisdf_) >= 8, 8, nrow(mtxdisdf_)))
+  h_ <- h_[1:y]
+  y <- length(i_) - (ifelse(nrow(mtxdisdf_) >= 9, 9, nrow(mtxdisdf_)))
+  i_ <- i_[1:y]
+  y <- length(j_) - (ifelse(nrow(mtxdisdf_) >= 10, 10, nrow(mtxdisdf_)))
+  j_ <- j_[1:y]
+  y <- length(k_) - (ifelse(nrow(mtxdisdf_) >= 11, 11, nrow(mtxdisdf_)))
+  k_ <- k_[1:y]
+  y <- length(l_) - (ifelse(nrow(mtxdisdf_) >= 12, 12, nrow(mtxdisdf_)))
+  l_ <- l_[1:y]
+  y <- length(m_) - (ifelse(nrow(mtxdisdf_) >= 13, 13, nrow(mtxdisdf_)))
+  m_ <- m_[1:y]
+  y <- length(n_) - (ifelse(nrow(mtxdisdf_) >= 14, 14, nrow(mtxdisdf_)))
+  n_ <- n_[1:y]
+  y <- length(o_) - (ifelse(nrow(mtxdisdf_) >= 15, 15, nrow(mtxdisdf_)))
+  o_ <- o_[1:y]
+  y <- length(p_) - (ifelse(nrow(mtxdisdf_) >= 16, 16, nrow(mtxdisdf_)))
+  p_ <- p_[1:y]
+  y <- length(q_) - (ifelse(nrow(mtxdisdf_) >= 17, 17, nrow(mtxdisdf_)))
+  q_ <- q_[1:y]
+  y <- length(r_) - (ifelse(nrow(mtxdisdf_) >= 18, 18, nrow(mtxdisdf_)))
+  r_ <- r_[1:y]
+  y <- length(s_) - (ifelse(nrow(mtxdisdf_) >= 19, 19, nrow(mtxdisdf_)))
+  s_ <- s_[1:y]
+
+  rm(y)
+
+  name_ <- c(a_, b_, c_, d_, e_, f_, g_, h_, i_, j_, k_, l_, m_, n_, o_, p_, q_, r_, s_)
+  df_ <- data.frame(expand.grid(mtxdis), name_[1:seq_len(nrow(expand.grid(mtxdis)))])
+  names(df_) <- c("dist.", "name_")
+
+  rm(a_, b_, c_, d_, e_, f_, g_, h_, i_, j_, k_, l_, m_, n_, o_, p_, q_, r_, s_)
+  rm(name_)
+
+  q_ <- strsplit(df_$name_, " & ")
+  mat_  <- matrix(unlist(q_), ncol = 2, byrow = TRUE)
+  q_df_   <- as.data.frame(matrix(unlist(q_), ncol = 2, byrow = TRUE))
+  df_ <- dplyr::bind_cols(df_, q_df_)
+
+  rm(q_, mat_, q_df_)
+
+  split_ <- strsplit(df_$V1, "_")
+  v1_split_ <- as.data.frame(matrix(unlist(split_), ncol = 4, byrow = TRUE))
+  split_ <- strsplit(df_$V2, "_")
+  v2_split_ <- as.data.frame(matrix(unlist(split_), ncol = 4, byrow = TRUE))
+
+  df_ <- dplyr::bind_cols(df_, v1_split_)
+  df_ <- dplyr::bind_cols(df_, v2_split_)
+  df_red_ <- subset(df_, V4...8 == V4...12 & V3...7 == V3...11)
+  site_year_month_day <- rep(unique(qecbnato0_x$site_year_month_day), nrow(df_red_))
+
+  df_red_ <- tibble::add_column(df_red_, site_year_month_day, .before = "dist.")
+
+  rm(split_, v1_split_, v2_split_)
+  rm(mtxdis, mtxdisdf_, df_, site_year_month_day)
+
+  matri_list[[x]] <- df_red_
+  matri_list <<- matri_list
+
+  rm(df_red_, qecbnato0_x, x)
+
+  }
+
+  matri_df <- do.call("rbind", matri_list)
+
+  names(matri_df) <- c("site_year_month_day", "dist.", "name_", "name_left", "name_right", "Type.Bloc.left", "Face.left", "Numéro.Bloc.échantillon.left", "Quadrat.left", "Type.Bloc.right", "Face.right", "Numéro.Bloc.échantillon.right", "Quadrat.right")
+
+  matri_df <<- matri_df
+
+  hist(matri_df$dist.)
+
+}
+
+data_ <- dplyr::filter(qecbnato0, Type.Bloc == "Bloc mobile")
+matri_list <- vector("list", length(unique(data_$site_year_month_day)))
+
+matri_fct_bmm(data = data_, conca = c(bret_egmp_basq_qecb, egmp_basq_qecb))
+hist(matri_df$dist., main = c(paste("Histo. of Bray (0-adjusted) dist. dissimilarity measures"), paste(" (sqrt transfo) - BMfs vs BMfi -")))
+
+matri_full_bm_bf_fi <- matri_df
+
+rm(data_, matri_df, matri_list)
+
+
+#############################################################
+#                                                           #
+#                     Plot dissimilarity                    #
+#                                                           #
+#############################################################
+## plot
+
+# activate line
+
+matri_full_bm_bf_fs <- tidyr::separate(matri_full_bm_bf_fs, "site_year_month_day", into = c("departement", "Site", "Year", "Month", "Day"), remove = FALSE)
+matri_full_bm_bf_fs$Site <- paste0(matri_full_bm_bf_fs$departement, "_", matri_full_bm_bf_fs$Site)
+matri_full_bm_bf_fs <- subset(matri_full_bm_bf_fs, select = - c(departement))
+
+matri_full_bm_bf_fs <- tibble::add_column(matri_full_bm_bf_fs, Date = as.Date(paste0(matri_full_bm_bf_fs$Year, "-", matri_full_bm_bf_fs$Month, "-", matri_full_bm_bf_fs$Day), origin = "1970-01-01"), .after = "Site")
+matri_full_bm_bf_fs$Site <- as.factor(matri_full_bm_bf_fs$Site)
+
+matri_full_bm_bf_fi <- tidyr::separate(matri_full_bm_bf_fi, "site_year_month_day", into = c("departement", "Site", "Year", "Month", "Day"), remove = FALSE)
+matri_full_bm_bf_fi$Site <- paste0(matri_full_bm_bf_fi$departement, "_", matri_full_bm_bf_fi$Site)
+matri_full_bm_bf_fi <- subset(matri_full_bm_bf_fi, select = - c(departement))
+matri_full_bm_bf_fi <- tibble::add_column(matri_full_bm_bf_fi, Date = as.Date(paste0(matri_full_bm_bf_fi$Year, "-", matri_full_bm_bf_fi$Month, "-", matri_full_bm_bf_fi$Day), origin = "1970-01-01"), .after = "Site")
+matri_full_bm_bf_fi$Site <- as.factor(matri_full_bm_bf_fi$Site)
+
+# if error message "Error in .Call.graphics(C_palette2, .Call(C_palette2, NULL)) : invalid graphics state"
+
+
+bf_fs_plot <- ggplot2::ggplot(matri_full_bm_bf_fs, ggplot2::aes(x = Site, y = dist.)) +
+  ggplot2::geom_boxplot() +
+  #geom_jitter(shape = 16, position=position_jitter(0.2)) +
+  ggplot2::xlab("") +
+  ggplot2::ylab("distance diss. BM.BF_FS") +
+  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 90, vjust = 0.5, hjust = 1))
+
+ggplot2::ggsave("distance_diss_BF_FS.png", bf_fs_plot, height = 4.5, width = 4)
+
+fs_fi_plot <- ggplot2::ggplot(matri_full_bm_bf_fi, ggplot2::aes(x = Site, y = dist.)) +
+  ggplot2::geom_boxplot() +
+  #geom_jitter(shape = 16, position=position_jitter(0.2)) +
+  ggplot2::xlab("") +
+  ggplot2::ylab("distance diss. BM_FS.FI") +
+  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 90, vjust = 0.5, hjust = 1))
+
+ggplot2::ggsave("distance_diss_FS_FI.png", fs_fi_plot, height = 4.5, width = 4)
+
+# issue with type de bloc, numéro de bloc and quadrat for df_ BM.BF_FS, cfr df_ left vs right variables doesn't give the right combination (variables with left vs right label in names come from the dissimilarity coefficient functions).
+matri_full_bm_bf_fs$Quadrat <- NA
+for (i in c(1:seq_len(nrow(matri_full_bm_bf_fs)))) {
+  ifelse(matri_full_bm_bf_fs$Type.Bloc.left[i] == "Bloc mobile", matri_full_bm_bf_fs$Quadrat[i] <- matri_full_bm_bf_fs$Quadrat.left[i], matri_full_bm_bf_fs$Quadrat[i] <- matri_full_bm_bf_fs$Quadrat.right[i])
+}
+matri_full_bm_bf_fs$Numéro.Bloc <- NA
+for (i in c(1:seq_len(nrow(matri_full_bm_bf_fs)))) {
+  ifelse(matri_full_bm_bf_fs$Type.Bloc.left[i] == "Bloc mobile", matri_full_bm_bf_fs$Numéro.Bloc[i] <- matri_full_bm_bf_fs$Numéro.Bloc.échantillon.left[i], matri_full_bm_bf_fs$Numéro.Bloc[i] <- matri_full_bm_bf_fs$Numéro.Bloc.échantillon.right[i])
+}
+
+matri_full_bm_bf_fs <- tibble::add_column(matri_full_bm_bf_fs, site_year_month_day.q_BMnb = paste0(matri_full_bm_bf_fs$site_year_month_day, "_",  matri_full_bm_bf_fs$Quadrat, "_", matri_full_bm_bf_fs$Numéro.Bloc), .after = "site_year_month_day")
+matri_full_bm_bf_fi <- tibble::add_column(matri_full_bm_bf_fi, site_year_month_day.q_BMnb = paste0(matri_full_bm_bf_fi$site_year_month_day, "_",  matri_full_bm_bf_fi$Quadrat.left, "_", matri_full_bm_bf_fi$Numéro.Bloc.échantillon.left), .after = "site_year_month_day")
+
+colnames(matri_full_bm_bf_fs) <- paste("BM.BF_FS", colnames(matri_full_bm_bf_fs), sep = "_")
+matri_full_bm_bf_fs <- dplyr::rename(matri_full_bm_bf_fs, site_year_month_day.q_BMnb = BM.BF_FS_site_year_month_day.q_BMnb)
+colnames(matri_full_bm_bf_fi) <- paste("BM_FS.FI", colnames(matri_full_bm_bf_fi), sep = "_")
+matri_full_bm_bf_fi <- dplyr::rename(matri_full_bm_bf_fi, site_year_month_day.q_BMnb = BM_FS.FI_site_year_month_day.q_BMnb)
+
+matri_full <- dplyr::full_join(matri_full_bm_bf_fs[, c("site_year_month_day.q_BMnb", "BM.BF_FS_dist.")], matri_full_bm_bf_fi[, c("site_year_month_day.q_BMnb", "BM_FS.FI_dist.")])
+
+matri_full <- tidyr::separate(matri_full, "site_year_month_day.q_BMnb", into = c("departement", "Site", "Year", "Month", "Day", "Quadrat", "Bloc Mobile Number"), remove = FALSE)
+matri_full$Site <- paste0(matri_full$departement, "_", matri_full$Site)
+matri_full <- subset(matri_full, select = - c(departement))
+matri_full <- tibble::add_column(matri_full, Date = as.Date(paste0(matri_full$Year, "-", matri_full$Month, "-", matri_full$Day), origin = "1970-01-01"), .after = "Site")
+
+# Name for report/plot
+
+matri_full <- tibble::add_column(matri_full, Site_bis = matri_full$Site, .after = "Site")
+
+matri_full$Site_bis <- ifelse(matri_full$Site == "GDMO_Locmariaquer", "Locmariaquer", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "GDMO_BegLann", "Beg Lann", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "FOUR_PlateauFour", "Plateau du Four", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "EGMP_GroinCou", "Groin du Cou", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "EGMP_PasEmsembert", "Le Pas d'Emsembert", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "EGMP_BreeBains", "La Brée-les-Bains", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "EGMP_PerreAntiochat", "Le Perré d'Antiochat", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "EGMP_Chassiron", "Chassiron", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "BASQ_FlotsBleusZP", "Les Flots Bleus / zone pêcheurs", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "BASQ_FlotsBleusZF", "Les Flots Bleus / zone familles", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "GONB_IlotStMichel", "Îlot Saint-Michel", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "FINS_Quemenes", "Quéménès", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "FINS_SeinGoulenez", "Île de Sein - Goulenez", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "FINS_SeinKilaourou", "Île de Sein - Kilaourou", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "ARMO_Verdelet", "Îlot du Verdelet", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "ARMO_Piegu", "Piégu", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "ARMO_Bilfot", "Pointe de Bilfot", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "ARMO_IlePlate", "Île Plate", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "PDMO_Perharidy", "Perharidy", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "BRES_Keraliou", "Keraliou", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "FINS_Mousterlin", "Pointe de Mousterlin", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "FINS_StNicolasGlenan", "Saint-Nicolas des Glénan", matri_full$Site_bis)
+matri_full$Site_bis <- ifelse(matri_full$Site == "FINS_AnseRoz", "Pointe de l'Anse du Roz", matri_full$Site_bis)
+
+saveRDS(matri_full, "matri_full.RDS")
+
+#############################################################
+#                                                           #
+#            Plot the dissimilarity per site                #
+#                                                           #
+#############################################################
+## plot dissimilarity coefficient
+
+matri_full$Year <- as.integer(matri_full$Year)
+matri_full$Month <- as.integer(matri_full$Month)
+matri_full$Day <- as.integer(matri_full$Day)
+
+
+## BM_FS.FI_dist => mobile boulder upper vs lower faces
+
+# Stats
+
+bm_fs_fi_dist_stat <- matri_full %>% dplyr::group_by(Site, Site_bis, Date, Year, Month, Day) %>% dplyr::summarize(BM_FS.FI_dist.moy = mean(BM_FS.FI_dist., na.rm = TRUE), BM_FS.FI_dist.et = sd(BM_FS.FI_dist., na.rm = TRUE), BM_FS.FI_dist.med = median(BM_FS.FI_dist., na.rm = TRUE), BM_FS.FI_dist.min = min(BM_FS.FI_dist., na.rm = TRUE), BM_FS.FI_dist.max = max(BM_FS.FI_dist., na.rm = TRUE), nb. = dplyr::n(), nb.notNa = sum(!is.na(BM_FS.FI_dist.)))
+
+bm_fs_fi_dist_stat <- dplyr::ungroup(bm_fs_fi_dist_stat)
+
+# Quality scale based on quartiles
+
+if (choice == "N") {
+  one <- round(mean(unlist(dplyr::filter(matri_full, BM_FS.FI_dist. <= quantile(matri_full$BM_FS.FI_dist., 0.25, na.rm = TRUE))["BM_FS.FI_dist."])), digits = 3)
+  two <- round(mean(unlist(dplyr::filter(matri_full, BM_FS.FI_dist. > quantile(matri_full$BM_FS.FI_dist., 0.25, na.rm = TRUE) & BM_FS.FI_dist. <= quantile(matri_full$BM_FS.FI_dist., 0.5, na.rm = TRUE))["BM_FS.FI_dist."])), digits = 3)
+  three <- round(mean(unlist(dplyr::filter(matri_full, BM_FS.FI_dist. > quantile(matri_full$BM_FS.FI_dist., 0.5, na.rm = TRUE) & BM_FS.FI_dist. <= quantile(matri_full$BM_FS.FI_dist., 0.75, na.rm = TRUE))["BM_FS.FI_dist."])), digits = 3)
+  four <- round(mean(unlist(dplyr::filter(matri_full, BM_FS.FI_dist. > quantile(matri_full$BM_FS.FI_dist., 0.75, na.rm = TRUE))["BM_FS.FI_dist."])), digits = 3)
+}else {
+  one <- 0.47
+  two <- 0.7
+  three <- 0.83
+  four <- 0.98
+}
+
+val_xmax <- as.Date(paste0(as.character(choice_date + 1), "-01-01"), origin = "1970-01-01")
+
+for (i in c(1:length(unique(bm_fs_fi_dist_stat$Site)))) {
+
+  df1 <- dplyr::filter(bm_fs_fi_dist_stat, bm_fs_fi_dist_stat$Site == unique(bm_fs_fi_dist_stat$Site)[i])
+
+  bm_fs_fi_plot <- ggplot2::ggplot() +
+  ggplot2::geom_point(ggplot2::aes(x = bm_fs_fi_dist_stat$Date, y = bm_fs_fi_dist_stat$BM_FS.FI_dist.med), col = "grey") +
+  ggplot2::geom_rect(ggplot2::aes(xmin = as.Date("2013-01-01", origin = "1970-01-01"), xmax = val_xmax, ymin = - 0.1, ymax = one, fill = "blue"), alpha = 0.3) +
+  ggplot2::geom_rect(ggplot2::aes(xmin = as.Date("2013-01-01", origin = "1970-01-01"), xmax = val_xmax, ymin = one, ymax = two, fill = "green"), alpha = 0.3) +
+  ggplot2::geom_rect(ggplot2::aes(xmin = as.Date("2013-01-01", origin = "1970-01-01"), xmax = val_xmax, ymin = two, ymax = three, fill = "yellow"), alpha = 0.3) +
+  ggplot2::geom_rect(ggplot2::aes(xmin = as.Date("2013-01-01", origin = "1970-01-01"), xmax = val_xmax, ymin = three, ymax = four, fill = "orange"), alpha = 0.3) +
+  ggplot2::geom_rect(ggplot2::aes(xmin = as.Date("2013-01-01", origin = "1970-01-01"), xmax = val_xmax, ymin = four, ymax = 1.1, fill = "red"), alpha = 0.3) +
+  ggplot2::scale_fill_manual(values = c("#FF0000", "#F59404", "#18E125", "#1A1AE8", "#FAFA15")) +
+  ggplot2::geom_pointrange(ggplot2::aes(x = df1$Date, y = df1$BM_FS.FI_dist.med, ymin = df1$BM_FS.FI_dist.min, ymax =  df1$BM_FS.FI_dist.max), col = "black") +
+  ggplot2::xlab("Date") +
+  ggplot2::ylab("Coef dissim BM FS-FI") +
+  ggplot2::ggtitle(unique(df1$Site_bis)) +
+  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 90, vjust = 0.5, hjust = 1), legend.position = "none")
+
+ggplot2::ggsave(paste0("fs_fi_", df1$Site, ".png"), device = "png", bm_fs_fi_plot, height = 3, width = 3.5)
+
+}
+
+rm(df1, four, i, one, three, two, xmax_, xmin_, ymax_, ymin_)
+
+
+## BM.BF_FS_dist => mobile boulder vs fixed boulder upper faces
+
+# Stats
+
+bm_bf_fs_dist_stat <- matri_full %>% dplyr::group_by(Site, Site_bis, Date, Year, Month, Day) %>% dplyr::summarize(BM.BF_FS_dist.moy = mean(BM.BF_FS_dist., na.rm = TRUE), BM.BF_FS_dist.et = sd(BM.BF_FS_dist., na.rm = TRUE), BM.BF_FS_dist.med = median(BM.BF_FS_dist., na.rm = TRUE), BM.BF_FS_dist.min = min(BM.BF_FS_dist., na.rm = TRUE), BM.BF_FS_dist.max = max(BM.BF_FS_dist., na.rm = TRUE), nb. = dplyr::n(), nb.notNa = sum(!is.na(BM.BF_FS_dist.)))
+
+bm_bf_fs_dist_stat <- dplyr::ungroup(bm_bf_fs_dist_stat)
+
+# Quality scale based on quartiles
+
+if (choice == "N") {
+  one <- round(mean(unlist(dplyr::filter(matri_full, BM.BF_FS_dist. <= quantile(matri_full$BM.BF_FS_dist., 0.25, na.rm = TRUE))["BM.BF_FS_dist."])), digits = 3)
+  two <- round(mean(unlist(dplyr::filter(matri_full, BM.BF_FS_dist. > quantile(matri_full$BM.BF_FS_dist., 0.25, na.rm = TRUE) & BM.BF_FS_dist. <= quantile(matri_full$BM.BF_FS_dist., 0.5, na.rm = TRUE))["BM.BF_FS_dist."])), digits = 3)
+  three <- round(mean(unlist(dplyr::filter(matri_full, BM.BF_FS_dist. > quantile(matri_full$BM.BF_FS_dist., 0.5, na.rm = TRUE) & BM.BF_FS_dist. <= quantile(matri_full$BM.BF_FS_dist., 0.75, na.rm = TRUE))["BM.BF_FS_dist."])), digits = 3)
+  four <- round(mean(unlist(dplyr::filter(matri_full, BM.BF_FS_dist. > quantile(matri_full$BM.BF_FS_dist., 0.75, na.rm = TRUE))["BM.BF_FS_dist."])), digits = 3)
+
+}else {
+  one <- 0.19
+  two <- 0.32
+  three <- 0.455
+  four <- 0.735
+}
+# Plot
+
+for (i in c(1:length(unique(bm_bf_fs_dist_stat$Site)))) {
+
+  df1 <- dplyr::filter(bm_bf_fs_dist_stat, bm_bf_fs_dist_stat$Site == unique(bm_bf_fs_dist_stat$Site)[i])
+
+  bm_bf_fs_plot <- ggplot2::ggplot() +
+  ggplot2::geom_point(ggplot2::aes(x = bm_bf_fs_dist_stat$Date, y = bm_bf_fs_dist_stat$BM.BF_FS_dist.med), col = "grey") +
+  ggplot2::geom_rect(ggplot2::aes(xmin = as.Date("2013-01-01", origin = "1970-01-01"), xmax = val_xmax, ymin = - 0.1, ymax = one, fill = "red"), alpha = 0.3) +
+  ggplot2::geom_rect(ggplot2::aes(xmin = as.Date("2013-01-01", origin = "1970-01-01"), xmax = val_xmax, ymin = one, ymax = two, fill = "orange"), alpha = 0.3) +
+  ggplot2::geom_rect(ggplot2::aes(xmin = as.Date("2013-01-01", origin = "1970-01-01"), xmax = val_xmax, ymin = two, ymax = three, fill = "yellow"), alpha = 0.3) +
+  ggplot2::geom_rect(ggplot2::aes(xmin = as.Date("2013-01-01", origin = "1970-01-01"), xmax = val_xmax, ymin = three, ymax = four, fill = "green"), alpha = 0.3) +
+  ggplot2::geom_rect(ggplot2::aes(xmin = as.Date("2013-01-01", origin = "1970-01-01"), xmax = val_xmax, ymin = four, ymax = 1.1, fill = "blue"), alpha = 0.3) +
+  ggplot2::scale_fill_manual(values = c("#FF0000", "#F59404", "#18E125", "#1A1AE8", "#FAFA15")) +
+  ggplot2::geom_pointrange(ggplot2::aes(x = df1$Date, y = df1$BM.BF_FS_dist.med, ymin = df1$BM.BF_FS_dist.min, ymax =  df1$BM.BF_FS_dist.max), col = "black") +
+  ggplot2::xlab("Date") +
+  ggplot2::ylab("Coef dissim BM-BF FS") +
+  ggplot2::ggtitle(unique(df1$Site_bis)) +
+  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 90, vjust = 0.5, hjust = 1), legend.position = "none")
+
+ggplot2::ggsave(paste0("bm_bf_", df1$Site, ".png"), device = "png", bm_bf_fs_plot, height = 3, width = 3.5)
+
+}
+
+rm(df1, four, i, one, three, two, xmax_, xmin_, ymax_, ymin_)