Data & packages

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
df = readRDS("ecd_obs_agathe.RDS")
df <- df[!is.na(df$obs_ts),]

Species

espece<-names(select(df, starts_with("num")))
espece<-espece[4:21]
espece[18]= "weight_Non target tunas nei"

Stratification

df$group = paste0("O",df$ocean)
# Création d'une variable group qui attribue O1
# pour les lignes qui ont le code 1 dans la varibale ocean 
# et O2 qui ont le code 2 dans la variable ocean 
# en sachant que O1: Atlantique 02: Indien 
data1<-df[df$group =="O1",]
# On récupère les lignes qui sont dans le groupe O1 
data2<-df[df$group =="O2",]
# On récupère les lignes qui sont dans le groupe O2

Fonction for ocean 1 : Atlantic

df<-data1

f = function(sp) { 
  Nb_0<-c(rep(NA,length(sp))) # création de la variable qui va contenir le nombre d'observation égale à 0 par espèce
  Nb_diff_0<-c(rep(NA,length(sp))) # création de la variable qui va contenir le nombre d'observations différentes de 0 par espèce
  tab<-cbind(Nb_0,Nb_diff_0) # combiner les deux vecteurs pour former une matrice 
  for (i in 1:length(sp)){ # pour toute les espèces dons leur nom est énuméré dans un vecteur sp
    # pour la suite on fait get(sp[i], df) pour pouvor faire df$sp[i] qui n'ai pas possible à cause de l'indéxation
    # on fait is.na pour savoir si dans certains calais une observation correspond à un NA 
    # on fait un table pour connaitre le nombre de TRUE (NA) et de FALSE (différent de NA)
    # le premier élément de la table à fait la somme du nombre de NA donc de TRUE 
    # le deuxième élément de la table à fait la somme du nombre de non NA donc de FALSE 
    # quand il n'y a que des FALSE ou que des TRUE la table renvoie uniquement le nombre de FALSE ou de TRUE 
    if (length(table(is.na(get(sp[i], df))))>1){ # si la table contient plus qu'une valeur ( des FALSE et des TRUE)
    tab[i,1]<-table(is.na(get(sp[i], df)))[[2]] # alors on récupère le nombre de TRUE et on le met à la ligne i dans la première colonne de la matrice tab 
    tab[i,2]<-table(is.na(get(sp[i], df)))[[1]]# alors on récupère le nombre de FALSE et on le met à la ligne i dans la deuxième colonne de la matrice tab 
    }
    else if (names(table(is.na(get(sp[i], df))))==TRUE){ # sinon si la table ne renvoie que des valeurs TRUE 
      tab[i,1]<-table(is.na(get(sp[i], df)))[[1]] # # alors on récupère le nombre de TRUE et on le met à la ligne i dans la première colonne de la matrice tab 
      tab[i,2]<-0 # et on met 0 dans la deuxième colonne de la matrice tab car il n'y à pas de valeurs différentes de 0 
      }
    else { # sinon la table ne revoie que des valeurs FALSE
      tab[i,1]<-0 # et donc le nombre de valeur égale à 0 est nulle 
      tab[i,2]<-table(is.na(get(sp[i], df)))[[1]] # alors on récupère le nombre de FALSE et on le met à la ligne i dans la deuxième colonne de la matrice tab 
      }
  }
  return(tab) # on retourne la matrice tab 
}

Apply for our species selection and save the table

res=sapply(espece,f) 
#write.csv(t(res),file = "0 vs non 0 - Atlantic.csv",quote = F,row.names = TRUE)

Fonction for ocean 2 : Indian

df<-data2

f = function(sp) { 
  Nb_0<-c(rep(NA,length(sp))) # création de la variable qui va contenir le nombre d'observation égale à 0 par espèce
  Nb_diff_0<-c(rep(NA,length(sp))) # création de la variable qui va contenir le nombre d'observations différentes de 0 par espèce
  tab<-cbind(Nb_0,Nb_diff_0) # combiner les deux vecteurs pour former une matrice 
  for (i in 1:length(sp)){ # pour toute les espèces dons leur nom est énuméré dans un vecteur sp
    # pour la suite on fait get(sp[i], df) pour pouvor faire df$sp[i] qui n'ai pas possible à cause de l'indéxation
    # on fait is.na pour savoir si dans certains calais une observation correspond à un NA 
    # on fait un table pour connaitre le nombre de TRUE (NA) et de FALSE (différent de NA)
    # le premier élément de la table à fait la somme du nombre de NA donc de TRUE 
    # le deuxième élément de la table à fait la somme du nombre de non NA donc de FALSE 
    # quand il n'y a que des FALSE ou que des TRUE la table renvoie uniquement le nombre de FALSE ou de TRUE 
    if (length(table(is.na(get(sp[i], df))))>1){ # si la table contient plus qu'une valeur ( des FALSE et des TRUE)
    tab[i,1]<-table(is.na(get(sp[i], df)))[[2]] # alors on récupère le nombre de TRUE et on le met à la ligne i dans la première colonne de la matrice tab 
    tab[i,2]<-table(is.na(get(sp[i], df)))[[1]]# alors on récupère le nombre de FALSE et on le met à la ligne i dans la deuxième colonne de la matrice tab 
    }
    else if (names(table(is.na(get(sp[i], df))))==TRUE){ # sinon si la table ne renvoie que des valeurs TRUE 
      tab[i,1]<-table(is.na(get(sp[i], df)))[[1]] # # alors on récupère le nombre de TRUE et on le met à la ligne i dans la première colonne de la matrice tab 
      tab[i,2]<-0 # et on met 0 dans la deuxième colonne de la matrice tab car il n'y à pas de valeurs différentes de 0 
      }
    else { # sinon la table ne revoie que des valeurs FALSE
      tab[i,1]<-0 # et donc le nombre de valeur égale à 0 est nulle 
      tab[i,2]<-table(is.na(get(sp[i], df)))[[1]] # alors on récupère le nombre de FALSE et on le met à la ligne i dans la deuxième colonne de la matrice tab 
      }
  }
  return(tab) # on retourne la matrice tab 
}

Apply for our species selection and save the table

res=sapply(espece,f) # on applique la fonction à notre vecteurs espèce
#write.csv(t(res),file = "0 vs non 0 - Indian.csv",quote = F,row.names = TRUE)# on enregistre la matrice dans l'espace de travaille