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

MATLAB Discussion :

Selection de ligne dans un dataset [Débutant]


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Selection de ligne dans un dataset
    Bonjour,
    Je commence tout juste à utiliser MATLAB après m’être bien fait la main sous R. Je m'excuse d'avance si ma question est simple.

    Je dispose d'un dataset dans lequel je ne veux garder seulement les lignes dont le nom est d'une certaine forme.

    Voici la forme du dataset :
       gn_ID                    nID        mean_ID    std_ID
        '630_DS141800236'        [2]         102.5     3.5355
        '630_DS141800285'        [6]        90.167     9.0203
        '630_DS141800309'        [6]          79.5     7.2042
    J'ai commencé à vouloir bidouiller avec les expressions régulières mais je n'arrive pas à en venir à bout.

    Voila le code que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            regexpi(gn_ID, '[\d+]_DS[\d+]')
    Voilà la sortie que je ne comprend pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ans = 
     
        [3]
        [3]
        [3]
        [3]
        [3]
        [3]
        [3]
    Je voudrais pouvoir supprimer les lignes dont le gn_ID ne correspond pas à '[\d+]_DS[\d+]'.

    Merci d'avance !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Ceci regexpi(gn_ID, '^\d+_DS\d+$'); sans crochets serait plus correct si tu veux avoir <chiffres>_DS<chiffres>.

    La mise entre crochets ici [\d+] signifie soit un chiffre, soit le signe +, et pas plusieurs chiffres à la suite. Je rajoute ^ de début et $ de fin afin de bien dire cela commence par ... et fini par ... et qu'il n'y ait rien d'autre dedans (par exemple 630_DS141800236toto).

    Maintenant la sortie que tu obtiens... qui sera dorénavant composée de [1] ou [] si l'élément ne correspond pas au critère, est un tableau de cellules qui contient les indices où la fonction regexpi repère le critère recherché.
    À partir de là tu peux appliquer la fonction cellfun (cf. FAQ) comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    indices = regexpi(gn_ID, '^\d+_DS\d+$');
    estVide = cellfun(@isempty, indices);
    puis utiliser l'indexage logique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gn_ID(~estVide) % éléments respectant le critère
    gn_ID(estVide)  % éléments ne respectant pas le critère

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    Bonjour,

    Ceci regexpi(gn_ID, '^\d+_DS\d+$'); sans crochets serait plus correct si tu veux avoir <chiffres>_DS<chiffres>.

    La mise entre crochets ici [\d+] signifie soit un chiffre, soit le signe +, et pas plusieurs chiffres à la suite. Je rajoute ^ de début et $ de fin afin de bien dire cela commence par ... et fini par ... et qu'il n'y ait rien d'autre dedans (par exemple 630_DS141800236toto).

    Maintenant la sortie que tu obtiens... qui sera dorénavant composée de [1] ou [] si l'élément ne correspond pas au critère, est un tableau de cellules qui contient les indices où la fonction regexpi repère le critère recherché.
    À partir de là tu peux appliquer la fonction cellfun (cf. FAQ) comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    indices = regexpi(gn_ID, '^\d+_DS\d+$');
    estVide = cellfun(@isempty, indices);
    puis utiliser l'indexage logique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gn_ID(~estVide) % éléments respectant le critère
    gn_ID(estVide)  % éléments ne respectant pas le critère

    Merci beaucoup ! C'est exactement ce que je n'arrivais pas à faire

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

Discussions similaires

  1. [C#] Limiter le nombre de lignes dans un dataset
    Par Oberown dans le forum Accès aux données
    Réponses: 3
    Dernier message: 19/01/2007, 23h09
  2. Réponses: 3
    Dernier message: 24/07/2006, 10h59
  3. [C# 2.0] Séléction de lignes dans un datagridview
    Par bootix dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/07/2006, 11h26
  4. [C#] Sélection de lignes dans un DataGrid
    Par wayak3 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 12/07/2005, 10h17
  5. [C#] Ajout d'une ligne dans un dataset
    Par frechy dans le forum Windows Forms
    Réponses: 9
    Dernier message: 22/12/2004, 09h35

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