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 :

remplir une matrice par des valeurs


Sujet :

R

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2012
    Messages : 5
    Points : 8
    Points
    8
    Par défaut remplir une matrice par des valeurs
    Bonjour à tous,

    j'ai un problème pour remplir une matrice avec mes résultats.
    Je dispose d'une matrice vide et d'un dataframe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    mat=matrix(nrow=6,ncol=6)
    colnames(mat)=c("A","B","C","D","E","F")
    rownames(mat)=c("A","B","C","D","E","F")
    ligne=c(4,5,6)
    colonne=c(1,4,3)
    nom_ligne=c("D","E","F")
    nom_colonne=c("A","D","C")
    resultat=c("T","B","B-T")
    dat=data.frame(ligne,colonne,nom_ligne,nom_colonne,resultat)
    Je voudrais remplir la matrice avec les valeurs contenues dans "resultat" du dataframe.
    Pour cela, je dispose dans le dataframe des indices de ligne et colonne (et leurs noms) correspondant à la case de la matrice à remplir.

    J'ai codé une triple boucle, où le compteur i parcourt les indices de la ligne, j parcourt les indices de la colonnne, et z parcourt le dataframe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    taille=dim(dat)[1]
    for (i in ligne)	
    {
    for (j in colonne)
    {
    for (z in 1:taille)		
    {
    mat[i,j]<-resultat[z]
    }
    }
    }
    mais les cases remplies ne sont pas celles que je veux.
    Quel est le problème dans ma boucle?
    Il y a moyen de le faire sans une boucle (par exemple en prenant en compte le nom des lignes et colonnes)?

    Merci à tous.

  2. #2
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Je ne suis pas sûre d'avoir tout à fait compris ce que vous souhaitez faire, mais déjà, le problème dans votre boucle est que pour chaque valeur de z vous ré-écrasez la valeur contenue dans mat[i,j], d'où le fait qu'à la fin vous n'ayez que la valeur "B-T" partout dans la matrice.

    Est-ce que ceci donne ce que vous souhaitez?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    taille=dim(dat)[1]
     
    for (i in ligne)	
    {
    	mat[i,colonne]<-resultat
    }
    Bonne continuation


    Cordialement,

    A.D.

Discussions similaires

  1. separer les nombres d'une matrice par des virgules
    Par tinacodec dans le forum MATLAB
    Réponses: 1
    Dernier message: 23/11/2010, 07h36
  2. Réponses: 26
    Dernier message: 20/06/2010, 18h24
  3. [AJAX] Remplir un tableau par des valeurs
    Par creep015 dans le forum AJAX
    Réponses: 1
    Dernier message: 06/04/2010, 12h47
  4. remplir une combobox par des lignes
    Par Axiome dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/12/2008, 23h30

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