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 :

Récupérer des chaines de caractères dans une chaine de caractère


Sujet :

R

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 38
    Points : 42
    Points
    42
    Par défaut Récupérer des chaines de caractères dans une chaine de caractère
    Bonjour à tous,

    J'ai un string très très long sans espace de ce type là:
    [1] "PO644420PO656002294pour2670024PA328PM645184MGPA381PM645125PSEPA1268PM645112MGPA2912PM645085MGPA1816PM645051MGPA1893PM645245MGPA334160PM645133MGPA588886PM645620MGPA590032PM645180MGPA2825PM645568MGPA333285PM645365MGPA590034PM645519MGPA706PM645268MGPA785PM645345MGPA2240PM645077MGPA267622PM645033MGPA268048PM645257MGPA590031PM645352MGPA333611PM645389MGPA332364PM645525MGPA335532PM645082MGPA335543PM645096MGPA331924PM645417MGPA335999PM645219MGPA356PM645358PA394PM645447PA543PM645064PA719PM645083PA765PM645138PA810PM645557PA840PM645617PA606040PM645144PA1116PM645530PA1155PM6452

    En gros ce que je voudrais faire c'est récupérer dans ce string tous les identifiants commençant par PA ou PM et finissant par un P mais sans le P.
    Par exemple pour la chaine suivante : PA328PM645184MGPA381
    je voudrais récupérer dans un vecteur
    1) PA328
    2) PM645184MG
    3) PA381

    Je vous remercie par avance.

    Bien cordialement,

    Raphaël

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut
    Bonjour,

    Une proposition avec le package stringr, voir aussi cette page.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    > V0 <- "PO644420PO656002294pour2670024PA328PM645184MGPA381PM645125PSEPA1268PM645112MGPA2912PM645085MGPA1816PM645051MGPA1893PM645245MGPA334160PM645133MGPA588886PM645620MGPA590032PM645180MGPA2825PM645568MGPA333285PM645365MGPA590034PM645519MGPA706PM645268MGPA785PM645345MGPA2240PM645077MGPA267622PM645033MGPA268048PM645257MGPA590031PM645352MGPA333611PM645389MGPA332364PM645525MGPA335532PM645082MGPA335543PM645096MGPA331924PM645417MGPA335999PM645219MGPA356PM645358PA394PM645447PA543PM645064PA719PM645083PA765PM645138PA810PM645557PA840PM645617PA606040PM645144PA1116PM645530PA1155PM6452"
    1) Découpage de la chaîne de caractères en utilisant le caractère "P" comme séparateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    > library(stringr)
    > V1 <- unlist(str_split(V0,"P"))
    > V1
     [1] ""                      "O644420"               "O656002294pour2670024" "A328"                  "M645184MG"            
     [6] "A381"                  "M645125"               "SE"                    "A1268"                 "M645112MG"            
    [11] "A2912"                 "M645085MG"             "A1816"                 "M645051MG"             "A1893"                
    [16] "M645245MG"             "A334160"               "M645133MG"             "A588886"               "M645620MG"            
    [21] "A590032"               "M645180MG"             "A2825"                 "M645568MG"             "A333285"              
    [26] "M645365MG"             "A590034"               "M645519MG"             "A706"                  "M645268MG"            
    [31] "A785"                  "M645345MG"             "A2240"                 "M645077MG"             "A267622"              
    [36] "M645033MG"             "A268048"               "M645257MG"             "A590031"               "M645352MG"            
    [41] "A333611"               "M645389MG"             "A332364"               "M645525MG"             "A335532"              
    [46] "M645082MG"             "A335543"               "M645096MG"             "A331924"               "M645417MG"            
    [51] "A335999"               "M645219MG"             "A356"                  "M645358"               "A394"                 
    [56] "M645447"               "A543"                  "M645064"               "A719"                  "M645083"              
    [61] "A765"                  "M645138"               "A810"                  "M645557"               "A840"                 
    [66] "M645617"               "A606040"               "M645144"               "A1116"                 "M645530"              
    [71] "A1155"                 "M6452"
    2) Sélection des éléments commençant par "A" ou "M"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > V2 <- V1[which(str_sub(V1[],1,1) %in% c("A","M"))]
    > V2
     [1] "A328"      "M645184MG" "A381"      "M645125"   "A1268"     "M645112MG" "A2912"     "M645085MG" "A1816"     "M645051MG" "A1893"     "M645245MG"
    [13] "A334160"   "M645133MG" "A588886"   "M645620MG" "A590032"   "M645180MG" "A2825"     "M645568MG" "A333285"   "M645365MG" "A590034"   "M645519MG"
    [25] "A706"      "M645268MG" "A785"      "M645345MG" "A2240"     "M645077MG" "A267622"   "M645033MG" "A268048"   "M645257MG" "A590031"   "M645352MG"
    [37] "A333611"   "M645389MG" "A332364"   "M645525MG" "A335532"   "M645082MG" "A335543"   "M645096MG" "A331924"   "M645417MG" "A335999"   "M645219MG"
    [49] "A356"      "M645358"   "A394"      "M645447"   "A543"      "M645064"   "A719"      "M645083"   "A765"      "M645138"   "A810"      "M645557"  
    [61] "A840"      "M645617"   "A606040"   "M645144"   "A1116"     "M645530"   "A1155"     "M6452"
    3) Ajout du caractère "P" au début de chaque élément :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    > V3 <- str_c("P", V2[])
    > V3
     [1] "PA328"      "PM645184MG" "PA381"      "PM645125"   "PA1268"     "PM645112MG" "PA2912"     "PM645085MG" "PA1816"     "PM645051MG" "PA1893"    
    [12] "PM645245MG" "PA334160"   "PM645133MG" "PA588886"   "PM645620MG" "PA590032"   "PM645180MG" "PA2825"     "PM645568MG" "PA333285"   "PM645365MG"
    [23] "PA590034"   "PM645519MG" "PA706"      "PM645268MG" "PA785"      "PM645345MG" "PA2240"     "PM645077MG" "PA267622"   "PM645033MG" "PA268048"  
    [34] "PM645257MG" "PA590031"   "PM645352MG" "PA333611"   "PM645389MG" "PA332364"   "PM645525MG" "PA335532"   "PM645082MG" "PA335543"   "PM645096MG"
    [45] "PA331924"   "PM645417MG" "PA335999"   "PM645219MG" "PA356"      "PM645358"   "PA394"      "PM645447"   "PA543"      "PM645064"   "PA719"     
    [56] "PM645083"   "PA765"      "PM645138"   "PA810"      "PM645557"   "PA840"      "PM645617"   "PA606040"   "PM645144"   "PA1116"     "PM645530"  
    [67] "PA1155"     "PM6452"
    NB : Si vous avez beaucoup de variables à découper ainsi, il faudra prévoir le cas particulier où la chaîne initiale commence par le caractère "A" ou "M" et supprimer le premier élément.

    Cordialement,

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/01/2012, 14h50
  2. Rajouter des caractères dans une chaine
    Par pymouse dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 22/05/2007, 17h35
  3. [Tableaux] Supprimer des caractères dans une chaine
    Par ddubois dans le forum Langage
    Réponses: 10
    Dernier message: 16/12/2006, 13h53
  4. Réponses: 4
    Dernier message: 29/08/2006, 17h44
  5. Réponses: 2
    Dernier message: 26/11/2005, 13h44

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