IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Division entre 2 matrices de tailles différentes


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut Division entre 2 matrices de tailles différentes
    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.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 100
    Par défaut
    essaie de reconstruire une table, et ensuite il te suffit de faire quelque chose comme

    data$BAD/(data$NSEQ)

    si tu peux donner les fichiers, ça aiderait à résoudre le problème

  3. #3
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut
    En effet, j'ai reconstruit ma 1ère table en y ajoutant la colonne BAD.
    En effet, c'était beaucoup + simple.
    J'ai abandonné l'idée de créer une 3ème matrice à partir des 2 premières.

  4. #4
    Ayest
    Invité(e)
    Par défaut
    Salut,

    La fonction merge devrait t'aider (les deux tableaux de données se trouvent respectivement dans les fichiers seqOK.txt et seqTot.txt dans mon exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    > seqOK=read.table("seqOK.txt",header=TRUE)
    > seqTot=read.table("seqTot.txt",header=TRUE)
    > merge(seqOK,seqTot, all=TRUE,by=c("ANNEE","CLASSE_LONGUEUR"))
       ANNEE CLASSE_LONGUEUR NB_SEQ.x NB_SEQ.y
    1   1988               1       NA        0
    2   1988               2       NA        3
    3   1989               1        4        5
    4   1989               2        3        6
    5   1990               1       NA        4
    6   1990               2       NA        0
    7   1991               1        2       NA
    8   1991               2        1       NA
    9   1992               1        2       NA
    10  1992               2        1       NA
    Y a plus qu'a faire la division.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fusionner des matrices de tailles différentes
    Par Marciane dans le forum R
    Réponses: 2
    Dernier message: 23/04/2012, 14h19
  2. Travailler sur 2 matrices de tailles différentes
    Par nilsmatlab dans le forum MATLAB
    Réponses: 12
    Dernier message: 24/06/2011, 12h21
  3. Réponses: 1
    Dernier message: 03/05/2011, 18h02
  4. Réponses: 20
    Dernier message: 03/03/2010, 15h32
  5. Correspondance entre deux vecteurs de taille différente
    Par MisterK dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 31/03/2008, 17h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo