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 des colonnes d'un jeu de données


Sujet :

R

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Supprimer des colonnes d'un jeu de données
    Bonjour,

    J'ai ici un jeu de données très gros avec pas mal de colonnes ou j'ai très peu de données. Les valeurs négatives correspondent à "NA". En gros je voudrais supprimer toutes les colonnes où j'ai moins de 10% de réponses.

    J'ai donc créé une boucle comme ci-après, mais ça ne semble pas fonctionner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(i in 1:ncol(d))
    {if ((length(which(d[,i]<0)))< nrow(d)-nrow(d)*(1/100))
    d<-d[,-i]
    }
    Quelqu'un sait-il quel est le problème ici?
    Merci beaucoup!

  2. #2
    Membre confirmé
    Homme Profil pro
    MCU
    Inscrit en
    Juillet 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : MCU
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 185
    Points : 486
    Points
    486
    Par défaut
    Bonjour,

    Sans regarder dans le détail, votre test semble faux, manque de parenthèses et vous avez oublié des crochets après le if.

    De plus, au sein de la boucle, supprimer des colonnes du data.frame d et assigner le résultat à d va créer un décalage. Dans votre exemple, si d a 100 colonnes nommées de "var1" à "var100" et que dans votre boucle, vous supprimez la 80e colonne, vous supprimez la colonne nommée "var80" et vous vous retrouvez avec d qui a 99 colonnes. Si par la suite vous supprimez la 81e colonne, vous allez supprimer la colonne nommée "var82" et ainsi de suite.

    Enfin, vous ne tirez pas parti du fait que R utilise des vecteurs. Par exemple, le code suivant répond à votre problème en prenant comme seuil 10% de données manquantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ## Création d'un jeu de données
    test <- lapply(1:100, function(x)return(rnorm(100, mean=1.5, sd=1)))
    test <- data.frame(test)
    names(test)<-paste("var", 1:100, sep="")
     
    ## Recodage des valeurs négatives en données manquantes
    is.na(test) <- test < 0
     
    ## Calcul de la proportion de valeurs manquantes
    proportion.missing <- sapply(test, function(x) return((length(which(is.na(x))) / length(x))))
     
    ## Sélection des colonnes dont la proportion de valeurs manquantes est inférieure à 10%
    resultat <- test[, which(proportion.missing < 0.1)]
    HTH

    Vincent

    HTH

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    D'accord merci beaucoup ça fonctionne ! J'avais identifié le problème du saut de variable dans ma boucle mais je n'avais pas trouvé de solution de remplacement.
    Il faudra que je me penche plus sur les fonctions apply à l'avenir, elles doivent être très pratiques lorsqu'on les maîtrise.

    Bonne journée!

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

Discussions similaires

  1. supprimer des colonnes
    Par nadine7 dans le forum Débuter
    Réponses: 2
    Dernier message: 29/01/2009, 11h15
  2. Supprimer des colonnes avec des cellules fusionnées
    Par alain74 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/03/2008, 11h07
  3. Supprimer des colonnes d'un tableau
    Par Lorenzox dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 16/11/2007, 14h21
  4. [C#] Supprimer des colonnes (Table avec 2 clés primaire)
    Par sara21 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 05/11/2006, 21h42
  5. [VBA-E] - supprimer des colonnes
    Par romano dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 02/02/2006, 14h22

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