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"

Fonction to make the table

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 
}

Table for our selection

res=sapply(espece,f) # on applique la fonction à notre vecteurs espèce
res
##      num_Billfishes num_Cephalopods num_Cetaceans num_Common dolphinfish
## [1,]          13804           16960         16965                  10827
## [2,]           3162               6             1                   6139
##      num_Non target tunas nei num_Other bony fishes num_Rainbow runner num_Rays
## [1,]                    16966                  7468              10578    16675
## [2,]                        0                  9498               6388      291
##      num_Rough triggerfish num_Sharks num_Sharks & Rays num_Silky shark
## [1,]                 11013      12397             12215           12668
## [2,]                  5953       4569              4751            4298
##      num_Target tunas nei num_Tunas nei num_Turtles num_Wahoo num_Whale shark
## [1,]                16966         16960       16949     12183           16966
## [2,]                    0             6          17      4783               0
##      weight_Non target tunas nei
## [1,]                       12538
## [2,]                        4428