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 :

Sélection de lignes dans un data.frame


Sujet :

R

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 19
    Points : 19
    Points
    19
    Par défaut Sélection de lignes dans un data.frame
    Bonjour,

    Je rencontre des difficultés pour un code.

    J'ai un data.frame avec 50 000 lignes environ et 3 colonnes. Il me faut conserver uniquement certaines lignes qui correspondent à un identifiant.
    Pour cela j'ai une liste fixe que j'ai déterminé manuellement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x <- c("51","18","82","44","15","313","4","497","513","6710")
    J'ai donc décidé de filtrer les valeurs de mon data.frame :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df1 <- tab[tab$identifiant %in% x, ]
    Lorsque je fais cela j'obtiens un data.frame avec uniquement 4 lignes (qui sont parmi celles que demande) il m'en manque donc 6. En fonction de ma liste de valeur le chiffre varie et je ne comprend pas pourquoi.

    J'ai donc tenté une nouvelle solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df1_1 <- AH[ c("518","1338","4382","7744","11915","34013","48325","49704","59813","68870"),1:3]
    Cette solution me donne bien le nombre de lignes qu'il me faut mais il n'y as aucune valeurs. J'ai des NA qui apparaissent partout.

    Je ne sais pas comment régler mon problème, j'ai essayé de supprimer les NA mais avec is.na() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df1 <- !is.na(AH[ c("518","1338","4382","7744","11915","34013","48325","49704","59813","68870"),1:3])
    Mais cela ne fonctionne pas et me donne des valeurs TRUE FALSE. Or dans mon cas les valeurs sont importantes.

    Ça fait deux jours que je cherche une solution et je ne trouve plus de solution.
    Auriez-vous une solution à me proposer ?

    Merci par avance

  2. #2
    Membre éprouvé

    Homme Profil pro
    Cyber Security & AI
    Inscrit en
    Février 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Cyber Security & AI

    Informations forums :
    Inscription : Février 2009
    Messages : 506
    Points : 1 189
    Points
    1 189
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Souvent dans les problèmes de filtre apparaissent des problèmes de formatage des données. Il est possible que des données soient formats texte soit au format numérique.

    La première solution me paraît tout à fait correcte, et pour cela je vérifierai avec la fonction :

    Que l'ensemble des valeurs sont des valeurs numériques ou ne le sont pas !

    Bien cordialement,

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 19
    Points : 19
    Points
    19
    Par défaut Sélection de lignes dans un data.frame
    Merci beaucoup de votre aide

    J'ai appliqué la fonction is.numeric et cela m'as indiqué FALSE.

    J'ai donc fait la manipulation suivante pour mettre tout mon data.frame en numérique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab2 <- as.data.frame(lapply(tab,as.numeric))
    Mais le problème est toujours présent.

    Mon problème peut-il venir d'ailleurs ?

    Bien cordialement,

  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
    Ce que tu appelles 'identifiant', ne serait-ce pas les noms des lignes (row.names pour R) et dans ce cas, la colonne identifiant n'existe pas dans ton data.frame à moins de l'avoir explicitement créée.

    Si comme je le crois, cet identifiant est bien le nom des lignes, le filtre est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df1 <- tab[ row.names( tab) %in% x, ]

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 19
    Points : 19
    Points
    19
    Par défaut Sélection de lignes dans un data.frame
    Oui et non j'ai essayé des deux manières.

    Pour commencer j'ai vraiment en colonne mon identifiant et mes autres paramètres avec des noms de lignes allant de 1 à n ( nom de ligne différent de mon identifiant)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df <- as.data.frame(lapply(tab,as.numeric))
    En filtrant sur ma colonne identifiant étant donnée que je ne trouvais pas cela jolie j'ai mis les id en nom de lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df1 <- data.frame(df,row.names = df[,3])
    Maintenant votre méthode varie en fonction de ce que je décide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x <- c("518","1338","4382","7744","11915","34013","48325","49704","59813","68870")
    df2 <- df1[ row.names(df1) %in% x, ]
    En faisant cela j'ai toujours 4 valeurs. Par contre si je fait avec mon data.frame sans le nom des lignes modifiés cela change :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x <- c("518","1338","4382","7744","11915","34013","48325","49704","59813","68870")
    df2 <- df[ row.names(df) %in% x, ]
    J'ai 8 lignes (toujours pas 10) cependant ce ne sont pas les lignes avec l'identifiant qu'il me faut (le nom des lignes correspond aux bon numéros d'identifiant mais ils ne sont pas identiques dans ce data.frame).

    merci de votre aide

  6. #6
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Petite question bête : es-tu sûr que tous les identifiants de ton vecteur x se retrouvent dans le data.frame ?
    Bon courage.
    Olivier

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 19
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Persuadée, j'ai vérifié manuellement.

    Bien cordialement,

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

Discussions similaires

  1. sélection de lignes dans un tableau
    Par schwarzy2 dans le forum Langage
    Réponses: 8
    Dernier message: 18/06/2008, 17h23
  2. Comment sélection un ligne dans un DataGridView?
    Par Subkill dans le forum VB.NET
    Réponses: 3
    Dernier message: 16/11/2007, 17h38
  3. Sélection de ligne dans une DataTable
    Par ruda.tom dans le forum JSF
    Réponses: 9
    Dernier message: 09/03/2007, 21h07
  4. interdire la sélection de ligne dans un DBGrid
    Par socooooool dans le forum Bases de données
    Réponses: 1
    Dernier message: 31/08/2006, 13h08
  5. Sélection de lignes dans une feuille Excel
    Par lerico dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/12/2005, 09h20

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