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 :

Dataframe Remplacer Substring apres machning pattern


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    Janvier 2023
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2023
    Messages : 1
    Par défaut Dataframe Remplacer Substring apres machning pattern
    Bonjour,

    Je galère que un point qui est surement basique.
    J'ai un tableau de données, dans lequel je cherche à substituer une chaine de caracteres par une autre, soit 3 digits après avoir trouvé un 'pattern".

    Voici un ex simplifié :
    df <- data.frame(
    ID = row_number(1:5),
    chaine = c("NA-NA-NA-NA-16-LUZ-NA-NA-NA-NA-19-PTR-NA-NA-NA-NA-3-ORA-NA-NA-NA-NA-3-ORH-NA-NA-NA-NA-1-BTH-NA-NA-16-LUZ-NA-NA-16-LUT",
    "NA-NA-NA-NA-16-LUD-NA-NA-NA-NA-19-PTR-NA-NA-NA-NA-3-ORD-NA-NA-NA-NA-3-ORH-NA-NA-NA-NA-1-BTH-NA-NA-16-LUZ-NA-NA-16-MIS",
    "NA-NA-NA-NA-16-LUZ-NA-NA-NA-NA-19-PTR-NA-NA-NA-NA-3-ORP-NA-NA-NA-NA-3-ORH-NA-NA-NA-NA-1-BTH-NA-NA-16-LUZ-NA-NA-16-LUZ",
    "NA-NA-NA-NA-16-LUB-NA-NA-NA-NA-19-PAR-NA-NA-NA-NA-3-ORP-NA-NA-NA-NA-3-ORH-NA-NA-NA-NA-1-BTH-NA-NA-16-LUZ-NA-NA-16-LUA",
    "NA-NA-NA-NA-19-PRP-NA-NA-NA-NA-19-PER-NA-NA-NA-NA-3-ORP-NA-NA-NA-NA-3-ORH-NA-NA-NA-NA-1-BTH-NA-NA-16-LUZ-NA-NA-16-LUZ") )
    Je voudrais remplacer "19-xxx-" par "19-P-" quels que soient les lettres après 19- et pour toutes les occurrences par lignes de 19.
    J'ai tenté différentes manips avec str_detect, str_replace_all, stru_sub et 19-PTR- mais n'ai pas réussi à les impbriquer (nest).

    J'ai donc ensuite pensé à trouver les positions des 19 pour remplacer en relatif ensuite les groupes de caracteres, en comptant à partir de l'indice de position de 19.

    Et cela n'a pas donné le résultat escompté non plus :

    # pour le 19
    indP <- gregexpr("(?=19)",df$chaine,perl=TRUE)
    trouvP <- `attributes<-`(indP[[1]],NULL)
    resP <- if (trouvP !=-1 ) {
    substr(df$chaine, trouvP+3, trouvP+5) <- "P"
    } else { df$chaine}
    df$chaine <- resP
    Si quelqu'un a une idée, je suis preneuse, merci ! :-)

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 478
    Par défaut
    Salut
    cela devrais etre un truc dans le genre en PERL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    my $chaine="NA-NA-NA-NA-16-LUZ-NA-NA-NA-NA-19-PTR-NA-NA-NA-NA-3-ORA-NA-NA-NA-NA-3-ORH-NA-NA-NA-NA-1-BTH-NA-NA-16-LUZ-NA-NA-16-LUT",
    "NA-NA-NA-NA-16-LUD-NA-NA-NA-NA-19-PTR-NA-NA-NA-NA-3-ORD-NA-NA-NA-NA-3-ORH-NA-NA-NA-NA-1-BTH-NA-NA-16-LUZ-NA-NA-16-MIS",
    "NA-NA-NA-NA-16-LUZ-NA-NA-NA-NA-19-PTR-NA-NA-NA-NA-3-ORP-NA-NA-NA-NA-3-ORH-NA-NA-NA-NA-1-BTH-NA-NA-16-LUZ-NA-NA-16-LUZ",
    "NA-NA-NA-NA-16-LUB-NA-NA-NA-NA-19-PAR-NA-NA-NA-NA-3-ORP-NA-NA-NA-NA-3-ORH-NA-NA-NA-NA-1-BTH-NA-NA-16-LUZ-NA-NA-16-LUA",
    "NA-NA-NA-NA-19-PRP-NA-NA-NA-NA-19-PER-NA-NA-NA-NA-3-ORP-NA-NA-NA-NA-3-ORH-NA-NA-NA-NA-1-BTH-NA-NA-16-LUZ-NA-NA-16-LUZ";
    $chaine=~s/19-??-/19-P-/;
    print $chaine;
    PS en regardant un peux les possibilité de R
    je pense que tu devrais pouvoir le faire de cette maniere

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    df<-data.frame(
    D = row_number(1:5),
    chaine=c("NA-NA-NA-NA-16-LUZ-NA-NA-NA-NA-19-PTR-NA-NA-NA-NA-3-ORA-NA-NA-NA-NA-3-ORH-NA-NA-NA-NA-1-BTH-NA-NA-16-LUZ-NA-NA-16-LUT",
    "NA-NA-NA-NA-16-LUD-NA-NA-NA-NA-19-PTR-NA-NA-NA-NA-3-ORD-NA-NA-NA-NA-3-ORH-NA-NA-NA-NA-1-BTH-NA-NA-16-LUZ-NA-NA-16-MIS",
    "NA-NA-NA-NA-16-LUZ-NA-NA-NA-NA-19-PTR-NA-NA-NA-NA-3-ORP-NA-NA-NA-NA-3-ORH-NA-NA-NA-NA-1-BTH-NA-NA-16-LUZ-NA-NA-16-LUZ",
    "NA-NA-NA-NA-16-LUB-NA-NA-NA-NA-19-PAR-NA-NA-NA-NA-3-ORP-NA-NA-NA-NA-3-ORH-NA-NA-NA-NA-1-BTH-NA-NA-16-LUZ-NA-NA-16-LUA",
    "NA-NA-NA-NA-19-PRP-NA-NA-NA-NA-19-PER-NA-NA-NA-NA-3-ORP-NA-NA-NA-NA-3-ORH-NA-NA-NA-NA-1-BTH-NA-NA-16-LUZ-NA-NA-16-LUZ"))
    df$NewChaine <- gsub("^19-??-", "19-P-", df$chaine, perl=T)
    le result tu l'aura bien compris est dans NewChaine

Discussions similaires

  1. Filtrer un champ d'après des patterns stockés dans une table
    Par AnkyFive dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 14/04/2016, 16h23
  2. Réponses: 2
    Dernier message: 15/03/2010, 21h41
  3. Utilisation d'un substring après BufferedReader
    Par Lolie11 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 24/06/2009, 18h13
  4. SUBSTR() après un GROUP BY
    Par Infomax7 dans le forum Informix
    Réponses: 1
    Dernier message: 27/05/2006, 15h08
  5. string dégénéré après substr()...
    Par cheprod dans le forum C++
    Réponses: 3
    Dernier message: 28/04/2006, 17h24

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