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