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 :

Supprimer les lignes incomplètes


Sujet :

R

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Supprimer les lignes incomplètes
    Bonjour,
    J'ai un souci en essayant d'extraire d'un jeu de données les lignes ne comportant pas de valeurs manquantes (NA), sur certaines colonnes.
    J'arrive facilement à isoler ce qui m'intéresse avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X <- data[complete.cases(data[,c(6,7)]),]
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Y <- na.omit(tech[,c(1,6,7)])
    Le problème, c'est que j'essaye ensuite sur ce nouveau dataset de faire des moyennes par facteurs communs, avec la fonction tapply et de reconstruire un dataset propre (un facteur = une moyenne).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    a <- tapply(x$var2, x$nom, mean)
    b <- tapply(x$var1, x$nom, mean)
    nom <- levels(x$nom)
     
    DF <- data.frame(nom =nom, var1 = var1, var2 = var2)
    Le problème, c'est que dans le nouveau dataset 'DF', j'ai des lignes entières de NA qui apparaissent, avec des noms (de la variable 'nom') qui réapparaissent d'on ne sait où. C'est-à-dire qu'ils étaient présents dans le dataset original 'data', mais qui ne sont plus dans le dataset nettoyé 'x', car la ligne comportait des NA, puis là ils réapparaissent quand je fais un tapply...
    Une idée?

    Merci!

  2. #2
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    nom (ou x$nom) est un facteur défini à partir de ses niveaux. tapply va travailler sur ceux-ci est non sur ceux qui figurent dans la data.frame. Comme les niveaux qui ne sont pas présent dans le data.frame existent toujours, tu les retrouves. Il faut utiliser la fonction droplevels pour les supprimer. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    donnees <- data.frame( f=factor( rep( c( "a", "b", "c"), each=12)), y=c( rnorm( 12), runif( 12), rep( NA, 12)))
    levels( donnees$f)
    tapply( donnees$y, donnees$f, mean)
     
    x <- donnees[complete.cases( donnees),]
    levels( x$f)
    tapply( x$y, x$f, mean)
     
    y <- droplevels( x)
    levels( y$f)
    tapply( y$y, y$f, mean)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Bien vu! Merci, en effet, la variable continue à stocker les niveaux non utilisés après un complete.case (ou toute autre condition apparement) et il faut nettoyer manuellement les niveaux non utilisés avec un drop.levels!
    Merci du coup de main

  4. #4
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    En réalité, la variable ne continue pas à stocker les niveaux non utilisés car les niveaux sont des propriétés (attribut dans la langage R) de l'objet factor, ici la colonne correspondante du data.frame. Les fonctions complete.cases ou na.omit travaillent sur les valeurs du data.frame, c'est-à-dire de chacun de ses objets et non sur le propriétés du data.frame (nombre de lignes, nombres de colonnes, ...) ni de chacun des objets constituant ses colonnes (classe et autres attributs). Ces fonctions ne réagissent qu'au test is.na( donnees[i,j]) ou donnees est le nom du data.frame et i et j, respectivement les indices de lignes et de colonnes.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/12/2006, 12h00
  2. [VB.NET]Comment supprimer les lignes d'un datagridView
    Par vijeo dans le forum Windows Forms
    Réponses: 1
    Dernier message: 01/09/2006, 17h54
  3. Supprimer les lignes vides d'un document Word
    Par Jerfa dans le forum VBA Word
    Réponses: 4
    Dernier message: 28/08/2006, 16h12
  4. Réponses: 2
    Dernier message: 04/05/2006, 13h10
  5. supprimer les lignes vides?
    Par VinnieMc dans le forum Langage
    Réponses: 5
    Dernier message: 27/02/2006, 14h01

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