Bonjour à tous,

Considérons 2 tables contenant des observations par année et par classes de longueur :
- pour la 1ère table, le nombre totale d'observations y figurent,
- pour la 2ème le nombre d'observations de mauvaise qualité.

Je souhaiterais calculer un ratio entre ces 2 tables pour connaître le %age de d'observations de mauvaise qualité par année et classe de longueur.

Un extrait de la 1ère table "nbSeqTot"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
ANNEE CLASSE_LONGUEUR NB_SEQ
1988                           1      0
1989                           1      5
1990                           1      4
1988                           2      3
1989                           2      6
1990                           2      0
Un extrait de la 2ème table "nbSeqKO"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
ANNEE CLASSE_LONGUEUR NB_SEQ
1989                           1      4
1991                           1      2
1992                           1      2
1989                           2      3
1991                           2      1
1992                           2      1
Le problème vient du fait que ces 2 matrices ne sont pas de la même taille.
Par exemple, dans la table des données de mauvaise qualité, je n'ai pas de données pour 1988.

J'ai alors créé une matrice de même dimension que la première puis j'ai procédé à un double match comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
prct = nbSeqTot
prct$NB_SEQ = NULL
prct$ANNEE = nbSeqTot$ANNEE
prct$CLASSE_LONGUEUR = nbSeqTot$CLASSE_LONGUEUR
prct$PRCT_KO = 0
 
for (i in (1:dim(prct)[1])){
    prct$PRCT_KO[i] = (nbSeqKO$NB_SEQ[match(prct$ANNEE[i],nbSeqKO$ANNEE)][match(prct$CLASSE_LONGUEUR[i],nbSeqKO$CLASSE_LONGUEUR)]) / 
    (nbSeqTot$NB_SEQ[match(prct$ANNEE[i],nbSeqTot$ANNEE)][match(prct$CLASSE_LONGUEUR[i],nbSeqTot$CLASSE_LONGUEUR)])
}
Mais les calculs de ratio se font uniquement sur la première classe de longueur !

Je ne trouve pas la solution,

Merci d'avance pour votre aide.