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 :

Extraction d'une chaine de caractères avec conditions


Sujet :

R

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 22
    Points : 14
    Points
    14
    Par défaut Extraction d'une chaine de caractères avec conditions
    Bonjour,
    Là, je suis face à un problème, je vais essayer de m'expliquer du mieux que je peux.
    Je souhaite créer une nouvelle variable à partir d'une variable déjà existante, mais la condition est assez particulière :
    ma variable d'origine a des observations comme ceci MFCDTA_0080E6RESI2NS1ATTE3M1TAT et MTEDTA_0120E6RESI2NS1ATTE3M1TAT
    La première partie, c'est la partie commune avec la différenciation FC ou TE, la deuxième partie est unique pour chaque observation.
    Ce que je veux faire, c'est que ma nouvelle variable ne comporte que les observations avec FC dans l'ancienne variable.
    J'espère m'être fait comprendre.
    Merci beaucoup pour l'aide.

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 038
    Points : 23 783
    Points
    23 783
    Par défaut
    Bonjour,

    FC et TE sont toujours positionnés sur les 2ème et 3ème caractères de la chaîne ?
    Parce que dans ce cas là, vous pouvez utiliser un test avec la fonction substr(x, start, stop) qui extrait la sous-chaîne de x de la position start à la position stop.
    Dans votre cas, start = 2 et stop = 3.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Juillet 2013
    Messages : 75
    Points : 191
    Points
    191
    Par défaut Avec les expressions régulières
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     (xc <- as.character(runif(10)))
    (pref <- sample(c('MFCDTA', 'MTEDTA'), 10, replace=TRUE))
    (maVar <- paste0(pref, sep='_', xc))
    grep('MTEDTA\\.*', maVar) # récupère les indices de tes variables
    maVar[grep('MTEDTA\\.*', maVar)] # tu peux stocker ça dans ta nouvelle variable
    PS : il y a probablement une autre fonction que tu peux utiliser sans utiliser les indices, à toi de chercher ?grep

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Re Bonjour,
    Alors, je crois que ne me suis pas assez bien expliqué , j'ai utilisé ta fonction
    substr(Nomvar, start= 2, stop= 31), car je voulais garder ce qui venait après FC ou TE, donc ce résultat m'a donné une nouvelle variable qui est du style FCDTA_......... ou TEDTA_............., sauf que moi je veux garder que les observations debutant par FC donc supprimer toutes les observations qui commencent par TE.
    Merci beaucoup pour votre aide

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 038
    Points : 23 783
    Points
    23 783
    Par défaut
    Oui, d'où le test nécessaire.
    Si Nomvar est un vecteur de chaînes de caractères, vous obtiendrez normalement ce que vous souhaitez en faisant quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nomvar2 <- substr(Nomvar, 2, 31)[substr(Nomvar, 2, 3) == "FC"]

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Bonjour,
    Je suis toujours avec ma table (je galère un peu je l'avoue)
    Alors j'ai créé ma variable Nomvar2 comme CED me l'a indiqué ; sauf que je me suis rendu compte que je ne pouvais pas l'injecter dans ma table ( donc aucun intérêt).
    Donc ma question est : est-ce que je peux procéder à l'extraction tel que je l'ai demandé en haut mais en restant dans ma table, c'est-à-dire que je fais les manipulations sur ma variable, et les changements de ma variable s'appliquent directement dans ma table; exemple:
    Au début j'ai:
    nomvar cout production
    MFCDTA_0080E6RESI2NS1ATTE3M1TAT 200 500
    MFCDTA_0080E33RESI2NS1ATTE3M1TAT 40 300
    MTEDTA_0400E6RESI2NS1ATTE3M1TAT 800 450
    MTEDTA_0120E6RESI2NS1ATTE3M1TAT 215 336
    MCFDTA_0120E6RESI2NS1ATTE3M1TAT 78 218
    Ce que je veux obtenir c'est:
    Nomvar cout production
    FCDTA_0080E6RESI2NS1ATTE3M1TAT 200 500
    FCDTA_0080E33RESI2NS1ATTE3M1TAT 40 300
    FCFDTA_0120E6RESI2NS1ATTE3M1TAT 78 218
    Donc, je veux non seulement supprimer la première lettre de ma variable" nomvar", et ne garder que les observations contenant "FC" dans la nomvar, et éliminer toutes celles avec "TE" .
    PS: les valeurs données sont fictives.
    Merci d'avance!

  7. #7
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 038
    Points : 23 783
    Points
    23 783
    Par défaut
    Dans ce cas-là, il faut en plus recourir à la fonction subset() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table2 <- subset(table, substr(Nomvar, 2, 3) == "FC")

  8. #8
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Merci pour la réponse, en effet c'est ce qu'il me fallait, à un detail près j'ai toujours les "M" devant les FC or que je veux m'en débarrasser !
    J'ai essayé cette fonction avant d'appliquer la vôtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab_inter <- subset(tab_finale, substr(Nomvar, start= 2, stop= 31))
    et j'ai ce message d'erreurs:
    Error in subset.data.frame(tab_finale, substr(Nomvar, start = 2, stop = 31)) :
    'subset' must be logical
    En gros, je voulais d'abord appliquer cette fonction pour me débarrasser des M ensuite, appliquer celle donnée par CED pour ne garder que les observations avec FC.
    Merci d'avance pour votre aide!

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 208
    Points : 461
    Points
    461
    Par défaut
    Hello,

    Je crois que tu t'embrouilles un peu la


    1 : tu lances le code de ced

    subset permet de filtrer la base sur les FC, comme tu le souhaites


    2: tu retouches la variable nom pour enlever la première lettre M:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab_finale$Nomvar<-sub(x=tab_finale$Nomvar,replacement="",pattern="^M")
    sub permet de remplacer ou d'enlever une partie d'une chaine de charactère


    -> c'est fini

  10. #10
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    MERCIIIIIIIIIIIIIIIIIIIIIIIIII
    Vous êtes au top!!

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

Discussions similaires

  1. Extraction d'une chaîne de caractère avec SQL
    Par opeo dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 28/07/2006, 15h36
  2. Dégradé sur une chaine de caractères avec 3 a 4 couleurs
    Par avogadro dans le forum Composants VCL
    Réponses: 6
    Dernier message: 31/03/2006, 13h21
  3. Lecture d'une chaine de caractère avec fgets
    Par mayoouketchup dans le forum Langage
    Réponses: 9
    Dernier message: 22/12/2005, 16h17
  4. Extraction d'une chaine de caractères
    Par megane dans le forum Langage
    Réponses: 2
    Dernier message: 05/01/2004, 14h52
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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