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 :

Matrices et valeurs absentes


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 Matrices et valeurs absentes
    Bonjour,

    Ma matrice possède des valeurs absentes (NA) et je souhaiterais les enlever, cependant l'option na.omit() supprime les lignes entieres de la matrice même s'il n'y a qu'une seule valeur absente dans cette ligne. Je cherche donc désespérement une manière pour enlever ces valeurs absentes, comment pourrait-on faire par exemple pour transformer chaque colonne de ma matrice en un vecteur ?


    A+
    Did

  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,

    Pour convertir les colonnes en vecteurs, tu peux utiliser as.vector:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vecteur1<-as.vector(colonne1)
    .

    T'as une autre stratégie pour traiter ton pb , t'utilises la fonction (na.rm=TRUE) qui te permet de ne pas prendre en compte les valeurs manquantes (NA) quand tu fais tes calculs sur la matrice.

    J'espère t'avoir éclairé un peu
    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
    Ok merci, je vais prendre plutôt le as.vector(), mais comment faire si on a n colonnes que l'on veut stocker dans n vecteurs, quelle est la syntaxe, afin d'eviter de tout rentrer a la main ?

    Merci
    Did

  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
    Re,

    Une question, est ce que tes colonnes sont des facteurs ? car par défaut dans la structure de la matrice les colonnes sont des vecteurs !
    Peut être t'as une data.frame mais pas une matrice ?

    a toi
    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
    Non, il s'agit d'une base de données que j'ai transformer ensuite en une matrice

  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
    Oui, j'entends bien mais juste pour vérifier le type de tes colonnes, si les colonnes sont de type vecteur t'auras pas besoin d'utiliser as.vector, quand t'appliques cette ligne de code ça te donne quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    apply(ta matrice,2,is.vector) # is et pas as

  7. #7
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut
    J'obtiens TRUE pour chaque colonne

  8. #8
    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
    Donc ce n'est pas la peine d'utiliser as.vector() , tes colonnes sont bien de type vecteur!

    Mais, franchement je ne vois pas l'intérêt de stocker tes colonnes en vecteurs, car tu peux traiter des données manquantes autrement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    x<-list()
     
    for(i in 1:nombre de colonnes de ta matrice)
    {
    x[[i]]<-Matrice[,i]
    }
     
    x[[1]] # pour extraire le 1 vecteur, x[[2]] le 2 pour le deuxième, ..
    bon courage
    Manoir

  9. #9
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut
    Ok merci, j'obtiens par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [[1]]
     [1] 18.58471 18.88142 19.06270 19.15234 19.33152 19.14428 19.09671 19.10949 18.82150 19.30116 18.99284 19.03018 19.19312
    [14] 18.70222 19.29828 19.30019 19.02661 18.81376 19.47456 18.81451 18.91029 18.96270 18.78483 18.90397 18.75267 19.09429
    [27] 18.32730 18.84000 18.78447 18.72737 19.10176 18.95073 18.83554 19.43817 18.94198 19.04583 19.16270 18.93260 18.98000
    [40] 19.01040 18.89172 19.36880 18.88039 19.27902 18.93371 18.98988 19.06202 18.99241 18.78522
    Comment faire pour sélectionner l'élément 1 de [[1]], c'est a dire la valeur 18.58471 ?

    Merci

  10. #10
    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
    Pour sélectionner le premier élément: x[[1]][1]

    Manoir

  11. #11
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut
    Il arrive que dans certains vecteurs il y a des valeurs absentes (NA), exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [[61]]
     [1] 54.98223 54.86819 54.99209 56.40449 56.46060 55.24141 55.28310 55.45175 55.12690 56.27573 55.65448 56.04621 55.38426
    [14] 55.25563 56.47229 55.03525 54.73062 55.00277 55.51769 55.51017 55.73046 55.43310 55.65559 55.46142 55.50201 55.90897
    [27] 55.67136 55.15077 55.79132 55.59345 56.27642 55.43878       NA 55.48710 55.52110 55.73518 55.99306 55.39602 55.86720
    [40] 55.87540 55.88580 55.26627 56.47990 55.99223 56.44450 55.21702 55.14607 55.46359 55.82468 55.23930
    Comment puis je faire pour récupérer, pour chaque vecteur, les indices des NA ?

    Merci

  12. #12
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942

  13. #13
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep("TRUE",is.na(x[[61]]))
    marche aussi!

  14. #14
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Citation Envoyé par manoir Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep("TRUE",is.na(x[[61]]))
    marche aussi!
    C'est vrai, mais si je peux me permettre, je trouve ça un peu tiré par les cheveux
    La fonction which() étant spécifiquement faite pour retourner des indices suivant une expression logique, le code gagne en clarté.

  15. #15
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut
    Ok je vais utiliser ma méthode de Pitipoisson, mais comment faire de maniere generale sur tous les parametres, pas seulement sur le 61 ?

  16. #16
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Tu peux essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lapply(x, function(i) which(is.na(i)))

  17. #17
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut
    Parfait, merci

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

Discussions similaires

  1. Filtre sur valeur absente
    Par stdebordeau dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/05/2009, 12h26
  2. valeur absente d'un conteneur
    Par julien_iz dans le forum C#
    Réponses: 2
    Dernier message: 13/02/2009, 13h51
  3. Importation fichier Excel : valeurs absentes
    Par cdtran dans le forum SAS Base
    Réponses: 2
    Dernier message: 07/11/2008, 18h06
  4. Réponses: 8
    Dernier message: 29/07/2008, 11h29
  5. Implementation d'une matrice +sieurs valeurs
    Par yanis97 dans le forum Langage
    Réponses: 15
    Dernier message: 19/11/2006, 12h17

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