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é :
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.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") )
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 :
Si quelqu'un a une idée, je suis preneuse, merci ! :-)# 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
Partager