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 :

Boucle for()


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut Boucle for()
    Bonjour,

    Je souhaite effectuer une opération pour tous les niveaux d'une de mes variables (PARAMETER) sauf un seul car il n'a aucune valeur, ie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(i in 1:nlevels(PARAMETER)
    mais je voudrais pas qu'il le fasse pour PARAMETER==Param_24 (exemple)

    Comment puis je faire ?

    Cdlt

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 73
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    j<-grep("Param_24",PARAMETER)
     
    for(i in 1:nlevels(PARAMETER)[-j])
    Manoir

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut
    En fait je vais rectifier un peu ma question:

    j'ai une matrice de taille nxp, avec pour ligne un numero de lot, pour colonne un nom de paramètre et a l'interieur des valeurs.

    Il se trouve que pour une colonne (pour un parametre quelconque) toutes les valeurs sont à NA.

    Je souhaiterais donc d'une part supprimer la colonne en question et d'autre part pouvoir récuperer le nom de la colonne (nom du paramètre)

    Voila c'est plus clair

    Merci de votre aide

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 73
    Par défaut
    Je te propose de faire tourner ça pour récupérer les noms de colonnes NA dans ta matrice.
    sansNA<-na.omit(as.data.frame(t(MAT))) # Utiliser as.data.frame, si MAT est une matrice
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MATFINAL<-t(sansNA) # matrice sans les colonnes NA
     
    setdiff(colnames(as.data.frame(MAT)),rownames(sansNA)) # récupérer les noms de tes colonnes NA
    J'espère que cela répond à ta question
    Manoir

  5. #5
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut
    Manoir, 2 gros problèmes:

    - ça me supprime même les colonnes qui n'ont qu'un seule NA, moi je voudrais que ça me supprime les colonnes qui n'ont que des NA sur toutes les lignes

    - la matrice sansNa est la transposée de celle que j'avais (parametre en ligne et lot en colonne)


    ??

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 73
    Par défaut
    Je suis d'accord avec le 1 problème, mais ce que t'intéresse est MATFINAL toi et pas sansNA.

    j'ai fait un petit code plus simple je pense

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fun<-function(x){
     y<-(sum(is.na(x))==length(x))
    }                           # fonction pour déterminer les colonnes manquantes
    indicNA<-which(apply(Mat,2,fun)==TRUE) # récupérer les indices de colonnes manquantes
     
    Matfinale<-Mat[,-indicNA]  # Matrice sans les colonnes manquantes
    ça devrait aller mnt nn ?

    Manoir

  7. #7
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut
    Manoir, c'est nickel pour Matfinale, j'ai bien une matrice sans la colonne des NA, par contre pour récuperer le nom de la colonne ça ne fonctionne pas

    ??

  8. #8
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut
    Ok c'est bon j'ai trouvé

  9. #9
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut
    Voici donc ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    fun=function(x){
    k=(sum(is.na(x)==length(x))}
    indicNA=which(apply(matrice2,2,fun)==TRUE)
    MatriceFinale2=matrice2[,-indicNA]      ## Permet d'avoir une matrice sans colonne remplie de NA
     
    sansNA=t(MatriceFinale2)
    t=setdiff(colnames(as.data.frame(matrice2)),rownames(sansNA)) ## récupere le nom des colonnes sans celle que l'on a supprimé
     
    q=grep(t,levels(Data_Base$PARAMETER))
    for(i in 1:length(levels(Data_Base$PARAMETER)[-q]))] ## effectue une boucle sur tous les paramètres sauf celui ou la colonne a été supprimé

    Il s'avère que ce code fonctionne correctement lorsqu'il existe une telle matrice ayant au moins une colonne remplie de NA, mais lorsque ma matrice n'en possède pas ça ne marche plus ...

    Comment puis-je rendre ce code généralisable ?

    Merci

  10. #10
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut
    En fait, le problème vient de indicNA qui renvoie named integer(0) lorsqu'il n'y a aucune colonne possédant que des NA.

    Du coup le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MatriceFinale2=matrice2[,-indicNA]
    ne marche pas ...

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

Discussions similaires

  1. Boucle for dans un script cmd
    Par nicolas.ganache dans le forum Développement
    Réponses: 4
    Dernier message: 19/07/2004, 16h07
  2. Réponses: 3
    Dernier message: 06/07/2004, 10h21
  3. [Debutant] Batch et Boucle for
    Par ludovic.fernandez dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 06/05/2004, 19h21
  4. [Swing][boucles] for, do, if .....comment faire simple?
    Par chastel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/05/2004, 22h49
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 11h54

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